; LLVM IR from aap/librw :: 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.LodePNGColorStats = type { i32, i32, i16, i16, i16, i32, i32, [1024 x i8], i32, i64, i32, i32 }
%struct.LodePNGColorMode = type { i32, i32, ptr, i64, i32, i32, i32, 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 noundef i32 @_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 @_Z27lodepng_compute_color_statsP17LodePNGColorStatsPKhjjPK16LodePNGColorMode(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %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 i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %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 i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i16, align 2
  %33 = alloca i32, align 4
  %34 = alloca i8, align 1
  %35 = alloca i8, align 1
  %36 = alloca i8, align 1
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  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
  %42 = load i32, ptr %9, align 4, !tbaa !9
  %43 = zext i32 %42 to i64
  %44 = load i32, ptr %10, align 4, !tbaa !9
  %45 = zext i32 %44 to i64
  %46 = mul i64 %43, %45
  store i64 %46, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %47 = load ptr, ptr %11, align 8, !tbaa !5
  %48 = call noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef %47)
  %49 = icmp ne i32 %48, 0
  %50 = zext i1 %49 to i64
  %51 = select i1 %49, i32 1, i32 0
  store i32 %51, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %52 = load ptr, ptr %11, align 8, !tbaa !5
  %53 = call noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef %52)
  %54 = icmp ne i32 %53, 0
  %55 = zext i1 %54 to i64
  %56 = select i1 %54, i32 0, i32 1
  store i32 %56, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = call noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %57)
  store i32 %58, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.LodePNGColorStats, ptr %59, i32 0, i32 8
  %61 = load i32, ptr %60, align 8, !tbaa !13
  %62 = icmp eq i32 %61, 1
  br i1 %62, label %63, label %66

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

66:                                               ; preds = %63, %5
  %67 = phi i1 [ false, %5 ], [ %65, %63 ]
  %68 = zext i1 %67 to i64
  %69 = select i1 %67, i32 1, i32 0
  store i32 %69, 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
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  store i32 257, ptr %22, align 4, !tbaa !9
  %70 = load i32, ptr %19, align 4, !tbaa !9
  %71 = icmp ule i32 %70, 8
  br i1 %71, label %72, label %90

72:                                               ; preds = %66
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.LodePNGColorStats, ptr %73, i32 0, i32 6
  %75 = load i32, ptr %74, align 4, !tbaa !16
  %76 = load i32, ptr %19, align 4, !tbaa !9
  %77 = shl i32 1, %76
  %78 = add i32 %75, %77
  %79 = icmp ult i32 257, %78
  br i1 %79, label %80, label %81

80:                                               ; preds = %72
  br label %88

81:                                               ; preds = %72
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.LodePNGColorStats, ptr %82, i32 0, i32 6
  %84 = load i32, ptr %83, align 4, !tbaa !16
  %85 = load i32, ptr %19, align 4, !tbaa !9
  %86 = shl i32 1, %85
  %87 = add i32 %84, %86
  br label %88

88:                                               ; preds = %81, %80
  %89 = phi i32 [ 257, %80 ], [ %87, %81 ]
  store i32 %89, ptr %22, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %88, %66
  %91 = load i64, ptr %14, align 8, !tbaa !11
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.LodePNGColorStats, ptr %92, i32 0, i32 9
  %94 = load i64, ptr %93, align 8, !tbaa !17
  %95 = add i64 %94, %91
  store i64 %95, ptr %93, align 8, !tbaa !17
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.LodePNGColorStats, ptr %96, i32 0, i32 10
  %98 = load i32, ptr %97, align 8, !tbaa !18
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %101, label %100

100:                                              ; preds = %90
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %101

101:                                              ; preds = %100, %90
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef %13)
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.LodePNGColorStats, ptr %102, i32 0, i32 5
  %104 = load i32, ptr %103, align 8, !tbaa !19
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %101
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %106, %101
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.LodePNGColorStats, ptr %108, i32 0, i32 0
  %110 = load i32, ptr %109, align 8, !tbaa !20
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %112, label %113

112:                                              ; preds = %107
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %113

113:                                              ; preds = %112, %107
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.LodePNGColorStats, ptr %114, i32 0, i32 8
  %116 = load i32, ptr %115, align 8, !tbaa !13
  %117 = icmp eq i32 %116, 16
  br i1 %117, label %118, label %119

118:                                              ; preds = %113
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %119

119:                                              ; preds = %118, %113
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.LodePNGColorStats, ptr %120, i32 0, i32 8
  %122 = load i32, ptr %121, align 8, !tbaa !13
  %123 = load i32, ptr %19, align 4, !tbaa !9
  %124 = icmp uge i32 %122, %123
  br i1 %124, label %125, label %126

125:                                              ; preds = %119
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %125, %119
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.LodePNGColorStats, ptr %127, i32 0, i32 6
  %129 = load i32, ptr %128, align 4, !tbaa !16
  %130 = load i32, ptr %22, align 4, !tbaa !9
  %131 = icmp uge i32 %129, %130
  br i1 %131, label %132, label %133

132:                                              ; preds = %126
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %133

133:                                              ; preds = %132, %126
  %134 = load i32, ptr %18, align 4, !tbaa !9
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %176, label %136

136:                                              ; preds = %133
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %137

137:                                              ; preds = %172, %136
  %138 = load i64, ptr %12, align 8, !tbaa !11
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.LodePNGColorStats, ptr %139, i32 0, i32 6
  %141 = load i32, ptr %140, align 4, !tbaa !16
  %142 = zext i32 %141 to i64
  %143 = icmp ult i64 %138, %142
  br i1 %143, label %144, label %175

144:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.LodePNGColorStats, ptr %145, i32 0, i32 7
  %147 = load i64, ptr %12, align 8, !tbaa !11
  %148 = mul i64 %147, 4
  %149 = getelementptr inbounds [1024 x i8], ptr %146, i64 0, i64 %148
  store ptr %149, ptr %23, align 8, !tbaa !5
  %150 = load ptr, ptr %23, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i64 0
  %152 = load i8, ptr %151, align 1, !tbaa !21
  %153 = load ptr, ptr %23, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %153, i64 1
  %155 = load i8, ptr %154, align 1, !tbaa !21
  %156 = load ptr, ptr %23, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 2
  %158 = load i8, ptr %157, align 1, !tbaa !21
  %159 = load ptr, ptr %23, align 8, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %159, i64 3
  %161 = load i8, ptr %160, align 1, !tbaa !21
  %162 = load i64, ptr %12, align 8, !tbaa !11
  %163 = trunc i64 %162 to i32
  %164 = call noundef i32 @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %13, i8 noundef zeroext %152, i8 noundef zeroext %155, i8 noundef zeroext %158, i8 noundef zeroext %161, i32 noundef %163)
  store i32 %164, ptr %15, align 4, !tbaa !9
  %165 = load i32, ptr %15, align 4, !tbaa !9
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %168

167:                                              ; preds = %144
  store i32 5, ptr %24, align 4
  br label %169

168:                                              ; preds = %144
  store i32 0, ptr %24, align 4
  br label %169

169:                                              ; preds = %168, %167
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  %170 = load i32, ptr %24, align 4
  switch i32 %170, label %806 [
    i32 0, label %171
    i32 5, label %804
  ]

171:                                              ; preds = %169
  br label %172

172:                                              ; preds = %171
  %173 = load i64, ptr %12, align 8, !tbaa !11
  %174 = add i64 %173, 1
  store i64 %174, ptr %12, align 8, !tbaa !11
  br label %137, !llvm.loop !22

175:                                              ; preds = %137
  br label %176

176:                                              ; preds = %175, %133
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.LodePNGColorMode, ptr %177, i32 0, i32 1
  %179 = load i32, ptr %178, align 4, !tbaa !24
  %180 = icmp eq i32 %179, 16
  br i1 %180, label %181, label %236

181:                                              ; preds = %176
  %182 = load i32, ptr %21, align 4, !tbaa !9
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %236, label %184

184:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #3
  store i16 0, ptr %25, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #3
  store i16 0, ptr %26, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #3
  store i16 0, ptr %27, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #3
  store i16 0, ptr %28, align 2, !tbaa !27
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %185

185:                                              ; preds = %232, %184
  %186 = load i64, ptr %12, align 8, !tbaa !11
  %187 = load i64, ptr %14, align 8, !tbaa !11
  %188 = icmp ne i64 %186, %187
  br i1 %188, label %189, label %235

189:                                              ; preds = %185
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = load i64, ptr %12, align 8, !tbaa !11
  %192 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %25, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %190, i64 noundef %191, ptr noundef %192)
  %193 = load i16, ptr %25, align 2, !tbaa !27
  %194 = zext i16 %193 to i32
  %195 = and i32 %194, 255
  %196 = load i16, ptr %25, align 2, !tbaa !27
  %197 = zext i16 %196 to i32
  %198 = ashr i32 %197, 8
  %199 = and i32 %198, 255
  %200 = icmp ne i32 %195, %199
  br i1 %200, label %228, label %201

201:                                              ; preds = %189
  %202 = load i16, ptr %26, align 2, !tbaa !27
  %203 = zext i16 %202 to i32
  %204 = and i32 %203, 255
  %205 = load i16, ptr %26, align 2, !tbaa !27
  %206 = zext i16 %205 to i32
  %207 = ashr i32 %206, 8
  %208 = and i32 %207, 255
  %209 = icmp ne i32 %204, %208
  br i1 %209, label %228, label %210

210:                                              ; preds = %201
  %211 = load i16, ptr %27, align 2, !tbaa !27
  %212 = zext i16 %211 to i32
  %213 = and i32 %212, 255
  %214 = load i16, ptr %27, align 2, !tbaa !27
  %215 = zext i16 %214 to i32
  %216 = ashr i32 %215, 8
  %217 = and i32 %216, 255
  %218 = icmp ne i32 %213, %217
  br i1 %218, label %228, label %219

219:                                              ; preds = %210
  %220 = load i16, ptr %28, align 2, !tbaa !27
  %221 = zext i16 %220 to i32
  %222 = and i32 %221, 255
  %223 = load i16, ptr %28, align 2, !tbaa !27
  %224 = zext i16 %223 to i32
  %225 = ashr i32 %224, 8
  %226 = and i32 %225, 255
  %227 = icmp ne i32 %222, %226
  br i1 %227, label %228, label %231

228:                                              ; preds = %219, %210, %201, %189
  %229 = load ptr, ptr %7, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.LodePNGColorStats, ptr %229, i32 0, i32 8
  store i32 16, ptr %230, align 8, !tbaa !13
  store i32 1, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %235

231:                                              ; preds = %219
  br label %232

232:                                              ; preds = %231
  %233 = load i64, ptr %12, align 8, !tbaa !11
  %234 = add i64 %233, 1
  store i64 %234, ptr %12, align 8, !tbaa !11
  br label %185, !llvm.loop !28

235:                                              ; preds = %228, %185
  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
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #3
  br label %236

236:                                              ; preds = %235, %181, %176
  %237 = load i32, ptr %21, align 4, !tbaa !9
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %239, label %435

239:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #3
  store i16 0, ptr %29, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #3
  store i16 0, ptr %30, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #3
  store i16 0, ptr %31, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #3
  store i16 0, ptr %32, align 2, !tbaa !27
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %240

240:                                              ; preds = %375, %239
  %241 = load i64, ptr %12, align 8, !tbaa !11
  %242 = load i64, ptr %14, align 8, !tbaa !11
  %243 = icmp ne i64 %241, %242
  br i1 %243, label %244, label %378

244:                                              ; preds = %240
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = load i64, ptr %12, align 8, !tbaa !11
  %247 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %29, ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %245, i64 noundef %246, ptr noundef %247)
  %248 = load i32, ptr %16, align 4, !tbaa !9
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %265, label %250

250:                                              ; preds = %244
  %251 = load i16, ptr %29, align 2, !tbaa !27
  %252 = zext i16 %251 to i32
  %253 = load i16, ptr %30, align 2, !tbaa !27
  %254 = zext i16 %253 to i32
  %255 = icmp ne i32 %252, %254
  br i1 %255, label %262, label %256

256:                                              ; preds = %250
  %257 = load i16, ptr %29, align 2, !tbaa !27
  %258 = zext i16 %257 to i32
  %259 = load i16, ptr %31, align 2, !tbaa !27
  %260 = zext i16 %259 to i32
  %261 = icmp ne i32 %258, %260
  br i1 %261, label %262, label %265

262:                                              ; preds = %256, %250
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.LodePNGColorStats, ptr %263, i32 0, i32 0
  store i32 1, ptr %264, align 8, !tbaa !20
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %262, %256, %244
  %266 = load i32, ptr %17, align 4, !tbaa !9
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %361, label %268

268:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  %269 = load i16, ptr %29, align 2, !tbaa !27
  %270 = zext i16 %269 to i32
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.LodePNGColorStats, ptr %271, i32 0, i32 2
  %273 = load i16, ptr %272, align 8, !tbaa !29
  %274 = zext i16 %273 to i32
  %275 = icmp eq i32 %270, %274
  br i1 %275, label %276, label %292

276:                                              ; preds = %268
  %277 = load i16, ptr %30, align 2, !tbaa !27
  %278 = zext i16 %277 to i32
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.LodePNGColorStats, ptr %279, i32 0, i32 3
  %281 = load i16, ptr %280, align 2, !tbaa !30
  %282 = zext i16 %281 to i32
  %283 = icmp eq i32 %278, %282
  br i1 %283, label %284, label %292

284:                                              ; preds = %276
  %285 = load i16, ptr %31, align 2, !tbaa !27
  %286 = zext i16 %285 to i32
  %287 = load ptr, ptr %7, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.LodePNGColorStats, ptr %287, i32 0, i32 4
  %289 = load i16, ptr %288, align 4, !tbaa !31
  %290 = zext i16 %289 to i32
  %291 = icmp eq i32 %286, %290
  br label %292

292:                                              ; preds = %284, %276, %268
  %293 = phi i1 [ false, %276 ], [ false, %268 ], [ %291, %284 ]
  %294 = zext i1 %293 to i32
  store i32 %294, ptr %33, align 4, !tbaa !9
  %295 = load i16, ptr %32, align 2, !tbaa !27
  %296 = zext i16 %295 to i32
  %297 = icmp ne i32 %296, 65535
  br i1 %297, label %298, label %315

298:                                              ; preds = %292
  %299 = load i16, ptr %32, align 2, !tbaa !27
  %300 = zext i16 %299 to i32
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %310, label %302

302:                                              ; preds = %298
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.LodePNGColorStats, ptr %303, i32 0, i32 1
  %305 = load i32, ptr %304, align 4, !tbaa !32
  %306 = icmp ne i32 %305, 0
  br i1 %306, label %307, label %315

307:                                              ; preds = %302
  %308 = load i32, ptr %33, align 4, !tbaa !9
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %315, label %310

310:                                              ; preds = %307, %298
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.LodePNGColorStats, ptr %311, i32 0, i32 5
  store i32 1, ptr %312, align 8, !tbaa !19
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.LodePNGColorStats, ptr %313, i32 0, i32 1
  store i32 0, ptr %314, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %360

315:                                              ; preds = %307, %302, %292
  %316 = load i16, ptr %32, align 2, !tbaa !27
  %317 = zext i16 %316 to i32
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %341

319:                                              ; preds = %315
  %320 = load ptr, ptr %7, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.LodePNGColorStats, ptr %320, i32 0, i32 5
  %322 = load i32, ptr %321, align 8, !tbaa !19
  %323 = icmp ne i32 %322, 0
  br i1 %323, label %341, label %324

324:                                              ; preds = %319
  %325 = load ptr, ptr %7, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.LodePNGColorStats, ptr %325, i32 0, i32 1
  %327 = load i32, ptr %326, align 4, !tbaa !32
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %341, label %329

329:                                              ; preds = %324
  %330 = load ptr, ptr %7, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.LodePNGColorStats, ptr %330, i32 0, i32 1
  store i32 1, ptr %331, align 4, !tbaa !32
  %332 = load i16, ptr %29, align 2, !tbaa !27
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.LodePNGColorStats, ptr %333, i32 0, i32 2
  store i16 %332, ptr %334, align 8, !tbaa !29
  %335 = load i16, ptr %30, align 2, !tbaa !27
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.LodePNGColorStats, ptr %336, i32 0, i32 3
  store i16 %335, ptr %337, align 2, !tbaa !30
  %338 = load i16, ptr %31, align 2, !tbaa !27
  %339 = load ptr, ptr %7, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.LodePNGColorStats, ptr %339, i32 0, i32 4
  store i16 %338, ptr %340, align 4, !tbaa !31
  br label %359

341:                                              ; preds = %324, %319, %315
  %342 = load i16, ptr %32, align 2, !tbaa !27
  %343 = zext i16 %342 to i32
  %344 = icmp eq i32 %343, 65535
  br i1 %344, label %345, label %358

345:                                              ; preds = %341
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.LodePNGColorStats, ptr %346, i32 0, i32 1
  %348 = load i32, ptr %347, align 4, !tbaa !32
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %350, label %358

350:                                              ; preds = %345
  %351 = load i32, ptr %33, align 4, !tbaa !9
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %353, label %358

353:                                              ; preds = %350
  %354 = load ptr, ptr %7, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.LodePNGColorStats, ptr %354, i32 0, i32 5
  store i32 1, ptr %355, align 8, !tbaa !19
  %356 = load ptr, ptr %7, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.LodePNGColorStats, ptr %356, i32 0, i32 1
  store i32 0, ptr %357, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %358

358:                                              ; preds = %353, %350, %345, %341
  br label %359

359:                                              ; preds = %358, %329
  br label %360

360:                                              ; preds = %359, %310
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  br label %361

361:                                              ; preds = %360, %265
  %362 = load i32, ptr %17, align 4, !tbaa !9
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %364, label %374

364:                                              ; preds = %361
  %365 = load i32, ptr %18, align 4, !tbaa !9
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %374

367:                                              ; preds = %364
  %368 = load i32, ptr %16, align 4, !tbaa !9
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %370, label %374

370:                                              ; preds = %367
  %371 = load i32, ptr %20, align 4, !tbaa !9
  %372 = icmp ne i32 %371, 0
  br i1 %372, label %373, label %374

373:                                              ; preds = %370
  br label %378

374:                                              ; preds = %370, %367, %364, %361
  br label %375

375:                                              ; preds = %374
  %376 = load i64, ptr %12, align 8, !tbaa !11
  %377 = add i64 %376, 1
  store i64 %377, ptr %12, align 8, !tbaa !11
  br label %240, !llvm.loop !33

378:                                              ; preds = %373, %240
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.LodePNGColorStats, ptr %379, i32 0, i32 1
  %381 = load i32, ptr %380, align 4, !tbaa !32
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %383, label %434

383:                                              ; preds = %378
  %384 = load ptr, ptr %7, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.LodePNGColorStats, ptr %384, i32 0, i32 5
  %386 = load i32, ptr %385, align 8, !tbaa !19
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %434, label %388

388:                                              ; preds = %383
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %389

389:                                              ; preds = %430, %388
  %390 = load i64, ptr %12, align 8, !tbaa !11
  %391 = load i64, ptr %14, align 8, !tbaa !11
  %392 = icmp ne i64 %390, %391
  br i1 %392, label %393, label %433

393:                                              ; preds = %389
  %394 = load ptr, ptr %8, align 8, !tbaa !5
  %395 = load i64, ptr %12, align 8, !tbaa !11
  %396 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %29, ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %394, i64 noundef %395, ptr noundef %396)
  %397 = load i16, ptr %32, align 2, !tbaa !27
  %398 = zext i16 %397 to i32
  %399 = icmp ne i32 %398, 0
  br i1 %399, label %400, label %429

400:                                              ; preds = %393
  %401 = load i16, ptr %29, align 2, !tbaa !27
  %402 = zext i16 %401 to i32
  %403 = load ptr, ptr %7, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.LodePNGColorStats, ptr %403, i32 0, i32 2
  %405 = load i16, ptr %404, align 8, !tbaa !29
  %406 = zext i16 %405 to i32
  %407 = icmp eq i32 %402, %406
  br i1 %407, label %408, label %429

408:                                              ; preds = %400
  %409 = load i16, ptr %30, align 2, !tbaa !27
  %410 = zext i16 %409 to i32
  %411 = load ptr, ptr %7, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.LodePNGColorStats, ptr %411, i32 0, i32 3
  %413 = load i16, ptr %412, align 2, !tbaa !30
  %414 = zext i16 %413 to i32
  %415 = icmp eq i32 %410, %414
  br i1 %415, label %416, label %429

416:                                              ; preds = %408
  %417 = load i16, ptr %31, align 2, !tbaa !27
  %418 = zext i16 %417 to i32
  %419 = load ptr, ptr %7, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.LodePNGColorStats, ptr %419, i32 0, i32 4
  %421 = load i16, ptr %420, align 4, !tbaa !31
  %422 = zext i16 %421 to i32
  %423 = icmp eq i32 %418, %422
  br i1 %423, label %424, label %429

424:                                              ; preds = %416
  %425 = load ptr, ptr %7, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.LodePNGColorStats, ptr %425, i32 0, i32 5
  store i32 1, ptr %426, align 8, !tbaa !19
  %427 = load ptr, ptr %7, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.LodePNGColorStats, ptr %427, i32 0, i32 1
  store i32 0, ptr %428, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %429

429:                                              ; preds = %424, %416, %408, %400, %393
  br label %430

430:                                              ; preds = %429
  %431 = load i64, ptr %12, align 8, !tbaa !11
  %432 = add i64 %431, 1
  store i64 %432, ptr %12, align 8, !tbaa !11
  br label %389, !llvm.loop !34

433:                                              ; preds = %389
  br label %434

434:                                              ; preds = %433, %383, %378
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #3
  br label %803

435:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #3
  store i8 0, ptr %34, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #3
  store i8 0, ptr %35, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #3
  store i8 0, ptr %36, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #3
  store i8 0, ptr %37, align 1, !tbaa !21
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %436

436:                                              ; preds = %699, %435
  %437 = load i64, ptr %12, align 8, !tbaa !11
  %438 = load i64, ptr %14, align 8, !tbaa !11
  %439 = icmp ne i64 %437, %438
  br i1 %439, label %440, label %702

440:                                              ; preds = %436
  %441 = load ptr, ptr %8, align 8, !tbaa !5
  %442 = load i64, ptr %12, align 8, !tbaa !11
  %443 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %34, ptr noundef %35, ptr noundef %36, ptr noundef %37, ptr noundef %441, i64 noundef %442, ptr noundef %443)
  %444 = load i32, ptr %20, align 4, !tbaa !9
  %445 = icmp ne i32 %444, 0
  br i1 %445, label %464, label %446

446:                                              ; preds = %440
  %447 = load ptr, ptr %7, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.LodePNGColorStats, ptr %447, i32 0, i32 8
  %449 = load i32, ptr %448, align 8, !tbaa !13
  %450 = icmp ult i32 %449, 8
  br i1 %450, label %451, label %464

451:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %452 = load i8, ptr %34, align 1, !tbaa !21
  %453 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %452)
  store i32 %453, ptr %38, align 4, !tbaa !9
  %454 = load i32, ptr %38, align 4, !tbaa !9
  %455 = load ptr, ptr %7, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.LodePNGColorStats, ptr %455, i32 0, i32 8
  %457 = load i32, ptr %456, align 8, !tbaa !13
  %458 = icmp ugt i32 %454, %457
  br i1 %458, label %459, label %463

459:                                              ; preds = %451
  %460 = load i32, ptr %38, align 4, !tbaa !9
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.LodePNGColorStats, ptr %461, i32 0, i32 8
  store i32 %460, ptr %462, align 8, !tbaa !13
  br label %463

463:                                              ; preds = %459, %451
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  br label %464

464:                                              ; preds = %463, %446, %440
  %465 = load ptr, ptr %7, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.LodePNGColorStats, ptr %465, i32 0, i32 8
  %467 = load i32, ptr %466, align 8, !tbaa !13
  %468 = load i32, ptr %19, align 4, !tbaa !9
  %469 = icmp uge i32 %467, %468
  %470 = zext i1 %469 to i32
  store i32 %470, ptr %20, align 4, !tbaa !9
  %471 = load i32, ptr %16, align 4, !tbaa !9
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %496, label %473

473:                                              ; preds = %464
  %474 = load i8, ptr %34, align 1, !tbaa !21
  %475 = zext i8 %474 to i32
  %476 = load i8, ptr %35, align 1, !tbaa !21
  %477 = zext i8 %476 to i32
  %478 = icmp ne i32 %475, %477
  br i1 %478, label %485, label %479

479:                                              ; preds = %473
  %480 = load i8, ptr %34, align 1, !tbaa !21
  %481 = zext i8 %480 to i32
  %482 = load i8, ptr %36, align 1, !tbaa !21
  %483 = zext i8 %482 to i32
  %484 = icmp ne i32 %481, %483
  br i1 %484, label %485, label %496

485:                                              ; preds = %479, %473
  %486 = load ptr, ptr %7, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.LodePNGColorStats, ptr %486, i32 0, i32 0
  store i32 1, ptr %487, align 8, !tbaa !20
  store i32 1, ptr %16, align 4, !tbaa !9
  %488 = load ptr, ptr %7, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.LodePNGColorStats, ptr %488, i32 0, i32 8
  %490 = load i32, ptr %489, align 8, !tbaa !13
  %491 = icmp ult i32 %490, 8
  br i1 %491, label %492, label %495

492:                                              ; preds = %485
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.LodePNGColorStats, ptr %493, i32 0, i32 8
  store i32 8, ptr %494, align 8, !tbaa !13
  br label %495

495:                                              ; preds = %492, %485
  br label %496

496:                                              ; preds = %495, %479, %464
  %497 = load i32, ptr %17, align 4, !tbaa !9
  %498 = icmp ne i32 %497, 0
  br i1 %498, label %611, label %499

499:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %500 = load i8, ptr %34, align 1, !tbaa !21
  %501 = zext i8 %500 to i32
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.LodePNGColorStats, ptr %502, i32 0, i32 2
  %504 = load i16, ptr %503, align 8, !tbaa !29
  %505 = zext i16 %504 to i32
  %506 = icmp eq i32 %501, %505
  br i1 %506, label %507, label %523

507:                                              ; preds = %499
  %508 = load i8, ptr %35, align 1, !tbaa !21
  %509 = zext i8 %508 to i32
  %510 = load ptr, ptr %7, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.LodePNGColorStats, ptr %510, i32 0, i32 3
  %512 = load i16, ptr %511, align 2, !tbaa !30
  %513 = zext i16 %512 to i32
  %514 = icmp eq i32 %509, %513
  br i1 %514, label %515, label %523

515:                                              ; preds = %507
  %516 = load i8, ptr %36, align 1, !tbaa !21
  %517 = zext i8 %516 to i32
  %518 = load ptr, ptr %7, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.LodePNGColorStats, ptr %518, i32 0, i32 4
  %520 = load i16, ptr %519, align 4, !tbaa !31
  %521 = zext i16 %520 to i32
  %522 = icmp eq i32 %517, %521
  br label %523

523:                                              ; preds = %515, %507, %499
  %524 = phi i1 [ false, %507 ], [ false, %499 ], [ %522, %515 ]
  %525 = zext i1 %524 to i32
  store i32 %525, ptr %39, align 4, !tbaa !9
  %526 = load i8, ptr %37, align 1, !tbaa !21
  %527 = zext i8 %526 to i32
  %528 = icmp ne i32 %527, 255
  br i1 %528, label %529, label %554

529:                                              ; preds = %523
  %530 = load i8, ptr %37, align 1, !tbaa !21
  %531 = zext i8 %530 to i32
  %532 = icmp ne i32 %531, 0
  br i1 %532, label %541, label %533

533:                                              ; preds = %529
  %534 = load ptr, ptr %7, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.LodePNGColorStats, ptr %534, i32 0, i32 1
  %536 = load i32, ptr %535, align 4, !tbaa !32
  %537 = icmp ne i32 %536, 0
  br i1 %537, label %538, label %554

538:                                              ; preds = %533
  %539 = load i32, ptr %39, align 4, !tbaa !9
  %540 = icmp ne i32 %539, 0
  br i1 %540, label %554, label %541

541:                                              ; preds = %538, %529
  %542 = load ptr, ptr %7, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.LodePNGColorStats, ptr %542, i32 0, i32 5
  store i32 1, ptr %543, align 8, !tbaa !19
  %544 = load ptr, ptr %7, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.LodePNGColorStats, ptr %544, i32 0, i32 1
  store i32 0, ptr %545, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  %546 = load ptr, ptr %7, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.LodePNGColorStats, ptr %546, i32 0, i32 8
  %548 = load i32, ptr %547, align 8, !tbaa !13
  %549 = icmp ult i32 %548, 8
  br i1 %549, label %550, label %553

550:                                              ; preds = %541
  %551 = load ptr, ptr %7, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.LodePNGColorStats, ptr %551, i32 0, i32 8
  store i32 8, ptr %552, align 8, !tbaa !13
  br label %553

553:                                              ; preds = %550, %541
  br label %610

554:                                              ; preds = %538, %533, %523
  %555 = load i8, ptr %37, align 1, !tbaa !21
  %556 = zext i8 %555 to i32
  %557 = icmp eq i32 %556, 0
  br i1 %557, label %558, label %583

558:                                              ; preds = %554
  %559 = load ptr, ptr %7, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.LodePNGColorStats, ptr %559, i32 0, i32 5
  %561 = load i32, ptr %560, align 8, !tbaa !19
  %562 = icmp ne i32 %561, 0
  br i1 %562, label %583, label %563

563:                                              ; preds = %558
  %564 = load ptr, ptr %7, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.LodePNGColorStats, ptr %564, i32 0, i32 1
  %566 = load i32, ptr %565, align 4, !tbaa !32
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %583, label %568

568:                                              ; preds = %563
  %569 = load ptr, ptr %7, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.LodePNGColorStats, ptr %569, i32 0, i32 1
  store i32 1, ptr %570, align 4, !tbaa !32
  %571 = load i8, ptr %34, align 1, !tbaa !21
  %572 = zext i8 %571 to i16
  %573 = load ptr, ptr %7, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.LodePNGColorStats, ptr %573, i32 0, i32 2
  store i16 %572, ptr %574, align 8, !tbaa !29
  %575 = load i8, ptr %35, align 1, !tbaa !21
  %576 = zext i8 %575 to i16
  %577 = load ptr, ptr %7, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.LodePNGColorStats, ptr %577, i32 0, i32 3
  store i16 %576, ptr %578, align 2, !tbaa !30
  %579 = load i8, ptr %36, align 1, !tbaa !21
  %580 = zext i8 %579 to i16
  %581 = load ptr, ptr %7, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.LodePNGColorStats, ptr %581, i32 0, i32 4
  store i16 %580, ptr %582, align 4, !tbaa !31
  br label %609

583:                                              ; preds = %563, %558, %554
  %584 = load i8, ptr %37, align 1, !tbaa !21
  %585 = zext i8 %584 to i32
  %586 = icmp eq i32 %585, 255
  br i1 %586, label %587, label %608

587:                                              ; preds = %583
  %588 = load ptr, ptr %7, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.LodePNGColorStats, ptr %588, i32 0, i32 1
  %590 = load i32, ptr %589, align 4, !tbaa !32
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %608

592:                                              ; preds = %587
  %593 = load i32, ptr %39, align 4, !tbaa !9
  %594 = icmp ne i32 %593, 0
  br i1 %594, label %595, label %608

595:                                              ; preds = %592
  %596 = load ptr, ptr %7, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.LodePNGColorStats, ptr %596, i32 0, i32 5
  store i32 1, ptr %597, align 8, !tbaa !19
  %598 = load ptr, ptr %7, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.LodePNGColorStats, ptr %598, i32 0, i32 1
  store i32 0, ptr %599, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  %600 = load ptr, ptr %7, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.LodePNGColorStats, ptr %600, i32 0, i32 8
  %602 = load i32, ptr %601, align 8, !tbaa !13
  %603 = icmp ult i32 %602, 8
  br i1 %603, label %604, label %607

604:                                              ; preds = %595
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.LodePNGColorStats, ptr %605, i32 0, i32 8
  store i32 8, ptr %606, align 8, !tbaa !13
  br label %607

607:                                              ; preds = %604, %595
  br label %608

608:                                              ; preds = %607, %592, %587, %583
  br label %609

609:                                              ; preds = %608, %568
  br label %610

610:                                              ; preds = %609, %553
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  br label %611

611:                                              ; preds = %610, %496
  %612 = load i32, ptr %18, align 4, !tbaa !9
  %613 = icmp ne i32 %612, 0
  br i1 %613, label %685, label %614

614:                                              ; preds = %611
  %615 = load i8, ptr %34, align 1, !tbaa !21
  %616 = load i8, ptr %35, align 1, !tbaa !21
  %617 = load i8, ptr %36, align 1, !tbaa !21
  %618 = load i8, ptr %37, align 1, !tbaa !21
  %619 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef %13, i8 noundef zeroext %615, i8 noundef zeroext %616, i8 noundef zeroext %617, i8 noundef zeroext %618)
  %620 = icmp ne i32 %619, 0
  br i1 %620, label %684, label %621

621:                                              ; preds = %614
  %622 = load i8, ptr %34, align 1, !tbaa !21
  %623 = load i8, ptr %35, align 1, !tbaa !21
  %624 = load i8, ptr %36, align 1, !tbaa !21
  %625 = load i8, ptr %37, align 1, !tbaa !21
  %626 = load ptr, ptr %7, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.LodePNGColorStats, ptr %626, i32 0, i32 6
  %628 = load i32, ptr %627, align 4, !tbaa !16
  %629 = call noundef i32 @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %13, i8 noundef zeroext %622, i8 noundef zeroext %623, i8 noundef zeroext %624, i8 noundef zeroext %625, i32 noundef %628)
  store i32 %629, ptr %15, align 4, !tbaa !9
  %630 = load i32, ptr %15, align 4, !tbaa !9
  %631 = icmp ne i32 %630, 0
  br i1 %631, label %632, label %633

632:                                              ; preds = %621
  store i32 5, ptr %24, align 4
  br label %800

633:                                              ; preds = %621
  %634 = load ptr, ptr %7, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.LodePNGColorStats, ptr %634, i32 0, i32 6
  %636 = load i32, ptr %635, align 4, !tbaa !16
  %637 = icmp ult i32 %636, 256
  br i1 %637, label %638, label %673

638:                                              ; preds = %633
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  %639 = load ptr, ptr %7, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.LodePNGColorStats, ptr %639, i32 0, i32 7
  %641 = getelementptr inbounds [1024 x i8], ptr %640, i64 0, i64 0
  store ptr %641, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %642 = load ptr, ptr %7, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.LodePNGColorStats, ptr %642, i32 0, i32 6
  %644 = load i32, ptr %643, align 4, !tbaa !16
  store i32 %644, ptr %41, align 4, !tbaa !9
  %645 = load i8, ptr %34, align 1, !tbaa !21
  %646 = load ptr, ptr %40, align 8, !tbaa !5
  %647 = load i32, ptr %41, align 4, !tbaa !9
  %648 = mul i32 %647, 4
  %649 = add i32 %648, 0
  %650 = zext i32 %649 to i64
  %651 = getelementptr inbounds i8, ptr %646, i64 %650
  store i8 %645, ptr %651, align 1, !tbaa !21
  %652 = load i8, ptr %35, align 1, !tbaa !21
  %653 = load ptr, ptr %40, align 8, !tbaa !5
  %654 = load i32, ptr %41, align 4, !tbaa !9
  %655 = mul i32 %654, 4
  %656 = add i32 %655, 1
  %657 = zext i32 %656 to i64
  %658 = getelementptr inbounds i8, ptr %653, i64 %657
  store i8 %652, ptr %658, align 1, !tbaa !21
  %659 = load i8, ptr %36, align 1, !tbaa !21
  %660 = load ptr, ptr %40, align 8, !tbaa !5
  %661 = load i32, ptr %41, align 4, !tbaa !9
  %662 = mul i32 %661, 4
  %663 = add i32 %662, 2
  %664 = zext i32 %663 to i64
  %665 = getelementptr inbounds i8, ptr %660, i64 %664
  store i8 %659, ptr %665, align 1, !tbaa !21
  %666 = load i8, ptr %37, align 1, !tbaa !21
  %667 = load ptr, ptr %40, align 8, !tbaa !5
  %668 = load i32, ptr %41, align 4, !tbaa !9
  %669 = mul i32 %668, 4
  %670 = add i32 %669, 3
  %671 = zext i32 %670 to i64
  %672 = getelementptr inbounds i8, ptr %667, i64 %671
  store i8 %666, ptr %672, align 1, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  br label %673

673:                                              ; preds = %638, %633
  %674 = load ptr, ptr %7, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.LodePNGColorStats, ptr %674, i32 0, i32 6
  %676 = load i32, ptr %675, align 4, !tbaa !16
  %677 = add i32 %676, 1
  store i32 %677, ptr %675, align 4, !tbaa !16
  %678 = load ptr, ptr %7, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.LodePNGColorStats, ptr %678, i32 0, i32 6
  %680 = load i32, ptr %679, align 4, !tbaa !16
  %681 = load i32, ptr %22, align 4, !tbaa !9
  %682 = icmp uge i32 %680, %681
  %683 = zext i1 %682 to i32
  store i32 %683, ptr %18, align 4, !tbaa !9
  br label %684

684:                                              ; preds = %673, %614
  br label %685

685:                                              ; preds = %684, %611
  %686 = load i32, ptr %17, align 4, !tbaa !9
  %687 = icmp ne i32 %686, 0
  br i1 %687, label %688, label %698

688:                                              ; preds = %685
  %689 = load i32, ptr %18, align 4, !tbaa !9
  %690 = icmp ne i32 %689, 0
  br i1 %690, label %691, label %698

691:                                              ; preds = %688
  %692 = load i32, ptr %16, align 4, !tbaa !9
  %693 = icmp ne i32 %692, 0
  br i1 %693, label %694, label %698

694:                                              ; preds = %691
  %695 = load i32, ptr %20, align 4, !tbaa !9
  %696 = icmp ne i32 %695, 0
  br i1 %696, label %697, label %698

697:                                              ; preds = %694
  br label %702

698:                                              ; preds = %694, %691, %688, %685
  br label %699

699:                                              ; preds = %698
  %700 = load i64, ptr %12, align 8, !tbaa !11
  %701 = add i64 %700, 1
  store i64 %701, ptr %12, align 8, !tbaa !11
  br label %436, !llvm.loop !35

702:                                              ; preds = %697, %436
  %703 = load ptr, ptr %7, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.LodePNGColorStats, ptr %703, i32 0, i32 1
  %705 = load i32, ptr %704, align 4, !tbaa !32
  %706 = icmp ne i32 %705, 0
  br i1 %706, label %707, label %766

707:                                              ; preds = %702
  %708 = load ptr, ptr %7, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.LodePNGColorStats, ptr %708, i32 0, i32 5
  %710 = load i32, ptr %709, align 8, !tbaa !19
  %711 = icmp ne i32 %710, 0
  br i1 %711, label %766, label %712

712:                                              ; preds = %707
  store i64 0, ptr %12, align 8, !tbaa !11
  br label %713

713:                                              ; preds = %762, %712
  %714 = load i64, ptr %12, align 8, !tbaa !11
  %715 = load i64, ptr %14, align 8, !tbaa !11
  %716 = icmp ne i64 %714, %715
  br i1 %716, label %717, label %765

717:                                              ; preds = %713
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  %719 = load i64, ptr %12, align 8, !tbaa !11
  %720 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %34, ptr noundef %35, ptr noundef %36, ptr noundef %37, ptr noundef %718, i64 noundef %719, ptr noundef %720)
  %721 = load i8, ptr %37, align 1, !tbaa !21
  %722 = zext i8 %721 to i32
  %723 = icmp ne i32 %722, 0
  br i1 %723, label %724, label %761

724:                                              ; preds = %717
  %725 = load i8, ptr %34, align 1, !tbaa !21
  %726 = zext i8 %725 to i32
  %727 = load ptr, ptr %7, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.LodePNGColorStats, ptr %727, i32 0, i32 2
  %729 = load i16, ptr %728, align 8, !tbaa !29
  %730 = zext i16 %729 to i32
  %731 = icmp eq i32 %726, %730
  br i1 %731, label %732, label %761

732:                                              ; preds = %724
  %733 = load i8, ptr %35, align 1, !tbaa !21
  %734 = zext i8 %733 to i32
  %735 = load ptr, ptr %7, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.LodePNGColorStats, ptr %735, i32 0, i32 3
  %737 = load i16, ptr %736, align 2, !tbaa !30
  %738 = zext i16 %737 to i32
  %739 = icmp eq i32 %734, %738
  br i1 %739, label %740, label %761

740:                                              ; preds = %732
  %741 = load i8, ptr %36, align 1, !tbaa !21
  %742 = zext i8 %741 to i32
  %743 = load ptr, ptr %7, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.LodePNGColorStats, ptr %743, i32 0, i32 4
  %745 = load i16, ptr %744, align 4, !tbaa !31
  %746 = zext i16 %745 to i32
  %747 = icmp eq i32 %742, %746
  br i1 %747, label %748, label %761

748:                                              ; preds = %740
  %749 = load ptr, ptr %7, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.LodePNGColorStats, ptr %749, i32 0, i32 5
  store i32 1, ptr %750, align 8, !tbaa !19
  %751 = load ptr, ptr %7, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.LodePNGColorStats, ptr %751, i32 0, i32 1
  store i32 0, ptr %752, align 4, !tbaa !32
  store i32 1, ptr %17, align 4, !tbaa !9
  %753 = load ptr, ptr %7, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.LodePNGColorStats, ptr %753, i32 0, i32 8
  %755 = load i32, ptr %754, align 8, !tbaa !13
  %756 = icmp ult i32 %755, 8
  br i1 %756, label %757, label %760

757:                                              ; preds = %748
  %758 = load ptr, ptr %7, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.LodePNGColorStats, ptr %758, i32 0, i32 8
  store i32 8, ptr %759, align 8, !tbaa !13
  br label %760

760:                                              ; preds = %757, %748
  br label %761

761:                                              ; preds = %760, %740, %732, %724, %717
  br label %762

762:                                              ; preds = %761
  %763 = load i64, ptr %12, align 8, !tbaa !11
  %764 = add i64 %763, 1
  store i64 %764, ptr %12, align 8, !tbaa !11
  br label %713, !llvm.loop !36

765:                                              ; preds = %713
  br label %766

766:                                              ; preds = %765, %707, %702
  %767 = load ptr, ptr %7, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.LodePNGColorStats, ptr %767, i32 0, i32 2
  %769 = load i16, ptr %768, align 8, !tbaa !29
  %770 = zext i16 %769 to i32
  %771 = shl i32 %770, 8
  %772 = load ptr, ptr %7, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.LodePNGColorStats, ptr %772, i32 0, i32 2
  %774 = load i16, ptr %773, align 8, !tbaa !29
  %775 = zext i16 %774 to i32
  %776 = add nsw i32 %775, %771
  %777 = trunc i32 %776 to i16
  store i16 %777, ptr %773, align 8, !tbaa !29
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.LodePNGColorStats, ptr %778, i32 0, i32 3
  %780 = load i16, ptr %779, align 2, !tbaa !30
  %781 = zext i16 %780 to i32
  %782 = shl i32 %781, 8
  %783 = load ptr, ptr %7, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.LodePNGColorStats, ptr %783, i32 0, i32 3
  %785 = load i16, ptr %784, align 2, !tbaa !30
  %786 = zext i16 %785 to i32
  %787 = add nsw i32 %786, %782
  %788 = trunc i32 %787 to i16
  store i16 %788, ptr %784, align 2, !tbaa !30
  %789 = load ptr, ptr %7, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.LodePNGColorStats, ptr %789, i32 0, i32 4
  %791 = load i16, ptr %790, align 4, !tbaa !31
  %792 = zext i16 %791 to i32
  %793 = shl i32 %792, 8
  %794 = load ptr, ptr %7, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.LodePNGColorStats, ptr %794, i32 0, i32 4
  %796 = load i16, ptr %795, align 4, !tbaa !31
  %797 = zext i16 %796 to i32
  %798 = add nsw i32 %797, %793
  %799 = trunc i32 %798 to i16
  store i16 %799, ptr %795, align 4, !tbaa !31
  store i32 0, ptr %24, align 4
  br label %800

800:                                              ; preds = %766, %632
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #3
  %801 = load i32, ptr %24, align 4
  switch i32 %801, label %806 [
    i32 0, label %802
    i32 5, label %804
  ]

802:                                              ; preds = %800
  br label %803

803:                                              ; preds = %802, %434
  br label %804

804:                                              ; preds = %803, %800, %169
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef %13)
  %805 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %805, ptr %6, align 4
  store i32 1, ptr %24, align 4
  br label %806

806:                                              ; preds = %804, %800, %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  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
  %807 = load i32, ptr %6, align 4
  ret i32 %807
}

; 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 1048}
!14 = !{!"_ZTS17LodePNGColorStats", !10, i64 0, !10, i64 4, !15, i64 8, !15, i64 10, !15, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !10, i64 1048, !12, i64 1056, !10, i64 1064, !10, i64 1068}
!15 = !{!"short", !7, i64 0}
!16 = !{!14, !10, i64 20}
!17 = !{!14, !12, i64 1056}
!18 = !{!14, !10, i64 1064}
!19 = !{!14, !10, i64 16}
!20 = !{!14, !10, i64 0}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!25, !10, i64 4}
!25 = !{!"_ZTS16LodePNGColorMode", !26, i64 0, !10, i64 4, !6, i64 8, !12, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36}
!26 = !{!"_ZTS16LodePNGColorType", !7, i64 0}
!27 = !{!15, !15, i64 0}
!28 = distinct !{!28, !23}
!29 = !{!14, !15, i64 8}
!30 = !{!14, !15, i64 10}
!31 = !{!14, !15, i64 12}
!32 = !{!14, !10, i64 4}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !23}


; 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 noundef i32 @_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 @_Z27lodepng_compute_color_statsP17LodePNGColorStatsPKhjjPK16LodePNGColorMode(ptr 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) #4
  %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)
  %23 = tail call noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef %4)
  %.not238 = icmp eq i32 %23, 0
  %24 = tail call noundef i32 @_Z15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %4)
  %25 = getelementptr inbounds i8, ptr %0, i64 1048
  %26 = load i32, ptr %25, align 8, !tbaa !5
  %27 = icmp eq i32 %26, 1
  %28 = icmp eq i32 %24, 1
  %29 = and i1 %28, %27
  %30 = icmp ult i32 %24, 9
  br i1 %30, label %31, label %36

31:                                               ; preds = %5
  %32 = getelementptr inbounds i8, ptr %0, i64 20
  %33 = load i32, ptr %32, align 4, !tbaa !12
  %34 = shl nuw nsw i32 1, %24
  %35 = add i32 %33, %34
  %spec.select = tail call i32 @llvm.umin.i32(i32 %35, i32 257)
  br label %36

36:                                               ; preds = %31, %5
  %.0221 = phi i32 [ %spec.select, %31 ], [ 257, %5 ]
  %37 = getelementptr inbounds i8, ptr %0, i64 1056
  %38 = load i64, ptr %37, align 8, !tbaa !13
  %39 = add i64 %38, %21
  store i64 %39, ptr %37, align 8, !tbaa !13
  %40 = getelementptr inbounds i8, ptr %0, i64 1064
  %41 = load i32, ptr %40, align 8, !tbaa !14
  %.not239 = icmp eq i32 %41, 0
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef nonnull %6)
  %42 = getelementptr inbounds i8, ptr %0, i64 16
  %43 = load i32, ptr %42, align 8, !tbaa !15
  %.not240 = icmp ne i32 %43, 0
  %narrow = or i1 %.not238, %.not240
  %.0205 = zext i1 %narrow to i32
  %44 = load i32, ptr %0, align 8, !tbaa !16
  %45 = or i32 %44, %22
  %narrow317 = icmp ne i32 %45, 0
  %.0200 = zext i1 %narrow317 to i32
  %46 = load i32, ptr %25, align 8, !tbaa !5
  %47 = icmp eq i32 %46, 16
  %.not242 = icmp uge i32 %46, %24
  %narrow319 = select i1 %.not242, i1 true, i1 %29
  %48 = getelementptr inbounds i8, ptr %0, i64 20
  %49 = load i32, ptr %48, align 4, !tbaa !12
  %.not243 = icmp uge i32 %49, %.0221
  %50 = select i1 %.not243, i1 true, i1 %47
  %narrow320 = select i1 %50, i1 true, i1 %.not239
  %.2216 = zext i1 %narrow320 to i32
  %.not = icmp eq i32 %49, 0
  %or.cond352 = or i1 %narrow320, %.not
  br i1 %or.cond352, label %.loopexit325, label %.lr.ph

.lr.ph:                                           ; preds = %36
  %51 = getelementptr inbounds i8, ptr %0, i64 24
  br label %57

52:                                               ; preds = %57
  %53 = add nuw nsw i64 %.0193328, 1
  %54 = load i32, ptr %48, align 4, !tbaa !12
  %55 = zext i32 %54 to i64
  %56 = icmp ult i64 %53, %55
  br i1 %56, label %57, label %.loopexit325, !llvm.loop !17

57:                                               ; preds = %.lr.ph, %52
  %.0193328 = phi i64 [ 0, %.lr.ph ], [ %53, %52 ]
  %58 = shl nuw nsw i64 %.0193328, 2
  %59 = getelementptr inbounds [1024 x i8], ptr %51, i64 0, i64 %58
  %60 = load i8, ptr %59, align 1, !tbaa !19
  %61 = getelementptr inbounds i8, ptr %59, i64 1
  %62 = load i8, ptr %61, align 1, !tbaa !19
  %63 = getelementptr inbounds i8, ptr %59, i64 2
  %64 = load i8, ptr %63, align 1, !tbaa !19
  %65 = getelementptr inbounds i8, ptr %59, i64 3
  %66 = load i8, ptr %65, align 1, !tbaa !19
  %67 = trunc nuw i64 %.0193328 to i32
  %68 = call noundef i32 @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %60, i8 noundef zeroext %62, i8 noundef zeroext %64, i8 noundef zeroext %66, i32 noundef %67)
  %.not245 = icmp eq i32 %68, 0
  br i1 %.not245, label %52, label %.loopexit326

.loopexit325:                                     ; preds = %52, %36
  %69 = getelementptr inbounds i8, ptr %4, i64 4
  %70 = load i32, ptr %69, align 4, !tbaa !20
  %.not246 = icmp eq i32 %70, 16
  br i1 %.not246, label %71, label %.thread

71:                                               ; preds = %.loopexit325
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #4
  store i16 0, ptr %7, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %8) #4
  store i16 0, ptr %8, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %9) #4
  store i16 0, ptr %9, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %10) #4
  store i16 0, ptr %10, align 2, !tbaa !24
  %.not247329 = icmp eq i64 %21, 0
  br i1 %.not247329, label %.thread292, label %.lr.ph331

72:                                               ; preds = %88
  %73 = add nuw i64 %.1330, 1
  %.not247 = icmp eq i64 %73, %21
  br i1 %.not247, label %.thread292, label %.lr.ph331, !llvm.loop !25

.thread292:                                       ; preds = %72, %71
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #4
  br label %.thread

.lr.ph331:                                        ; preds = %71, %72
  %.1330 = phi i64 [ %73, %72 ], [ 0, %71 ]
  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 %.1330, ptr noundef %4)
  %74 = load i16, ptr %7, align 2, !tbaa !24
  %75 = zext i16 %74 to i32
  %76 = and i32 %75, 255
  %77 = lshr i32 %75, 8
  %.not248 = icmp eq i32 %76, %77
  br i1 %.not248, label %78, label %93

78:                                               ; preds = %.lr.ph331
  %79 = load i16, ptr %8, align 2, !tbaa !24
  %80 = zext i16 %79 to i32
  %81 = and i32 %80, 255
  %82 = lshr i32 %80, 8
  %.not249 = icmp eq i32 %81, %82
  br i1 %.not249, label %83, label %93

83:                                               ; preds = %78
  %84 = load i16, ptr %9, align 2, !tbaa !24
  %85 = zext i16 %84 to i32
  %86 = and i32 %85, 255
  %87 = lshr i32 %85, 8
  %.not250 = icmp eq i32 %86, %87
  br i1 %.not250, label %88, label %93

88:                                               ; preds = %83
  %89 = load i16, ptr %10, align 2, !tbaa !24
  %90 = zext i16 %89 to i32
  %91 = and i32 %90, 255
  %92 = lshr i32 %90, 8
  %.not251 = icmp eq i32 %91, %92
  br i1 %.not251, label %72, label %93

93:                                               ; preds = %88, %83, %78, %.lr.ph331
  store i32 16, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %11) #4
  store i16 0, ptr %11, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %12) #4
  store i16 0, ptr %12, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #4
  store i16 0, ptr %13, align 2, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %14) #4
  store i16 0, ptr %14, align 2, !tbaa !24
  %94 = getelementptr inbounds i8, ptr %0, i64 8
  %95 = getelementptr inbounds i8, ptr %0, i64 10
  %96 = getelementptr inbounds i8, ptr %0, i64 12
  %97 = getelementptr inbounds i8, ptr %0, i64 4
  br label %98

98:                                               ; preds = %93, %.thread300
  %.2334 = phi i64 [ 0, %93 ], [ %134, %.thread300 ]
  %.1201333 = phi i32 [ %.0200, %93 ], [ %.2202, %.thread300 ]
  %.1206332 = phi i32 [ %.0205, %93 ], [ %.3208305, %.thread300 ]
  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 %.2334, ptr noundef %4)
  %.not271 = icmp eq i32 %.1201333, 0
  br i1 %.not271, label %99, label %104

99:                                               ; preds = %98
  %100 = load i16, ptr %11, align 2, !tbaa !24
  %101 = load i16, ptr %12, align 2, !tbaa !24
  %.not272 = icmp eq i16 %100, %101
  %102 = load i16, ptr %13, align 2
  %.not273 = icmp eq i16 %100, %102
  %or.cond = select i1 %.not272, i1 %.not273, i1 false
  br i1 %or.cond, label %104, label %103

103:                                              ; preds = %99
  store i32 1, ptr %0, align 8, !tbaa !16
  br label %104

104:                                              ; preds = %99, %103, %98
  %105 = phi i1 [ true, %98 ], [ true, %103 ], [ false, %99 ]
  %.2202 = phi i32 [ 1, %98 ], [ 1, %103 ], [ 0, %99 ]
  %.not274 = icmp eq i32 %.1206332, 0
  br i1 %.not274, label %106, label %133

106:                                              ; preds = %104
  %107 = load i16, ptr %11, align 2, !tbaa !24
  %108 = load i16, ptr %94, align 8, !tbaa !26
  %109 = icmp eq i16 %107, %108
  br i1 %109, label %110, label %118

110:                                              ; preds = %106
  %111 = load i16, ptr %12, align 2, !tbaa !24
  %112 = load i16, ptr %95, align 2, !tbaa !27
  %113 = icmp eq i16 %111, %112
  br i1 %113, label %114, label %118

114:                                              ; preds = %110
  %115 = load i16, ptr %13, align 2, !tbaa !24
  %116 = load i16, ptr %96, align 4, !tbaa !28
  %117 = icmp eq i16 %115, %116
  br label %118

118:                                              ; preds = %114, %110, %106
  %119 = phi i1 [ false, %110 ], [ false, %106 ], [ %117, %114 ]
  %120 = load i16, ptr %14, align 2, !tbaa !24
  switch i16 %120, label %.sink.split [
    i16 -1, label %130
    i16 0, label %121
  ]

121:                                              ; preds = %118
  %122 = load i32, ptr %97, align 4, !tbaa !29
  %123 = icmp eq i32 %122, 0
  %or.cond3 = select i1 %123, i1 true, i1 %119
  br i1 %or.cond3, label %124, label %.sink.split

124:                                              ; preds = %121
  %125 = load i32, ptr %42, align 8, !tbaa !15
  %126 = or i32 %125, %122
  %brmerge.not = icmp eq i32 %126, 0
  br i1 %brmerge.not, label %127, label %.thread300

127:                                              ; preds = %124
  store i32 1, ptr %97, align 4, !tbaa !29
  store i16 %107, ptr %94, align 8, !tbaa !26
  %128 = load i16, ptr %12, align 2, !tbaa !24
  store i16 %128, ptr %95, align 2, !tbaa !27
  %129 = load i16, ptr %13, align 2, !tbaa !24
  store i16 %129, ptr %96, align 4, !tbaa !28
  br label %.thread300

130:                                              ; preds = %118
  %131 = load i32, ptr %97, align 4, !tbaa !29
  %132 = icmp ne i32 %131, 0
  %or.cond5 = select i1 %132, i1 %119, i1 false
  br i1 %or.cond5, label %.sink.split, label %.thread300

.sink.split:                                      ; preds = %130, %121, %118
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %97, align 4, !tbaa !29
  br label %133

133:                                              ; preds = %.sink.split, %104
  br i1 %105, label %135, label %.thread300

.thread300:                                       ; preds = %124, %127, %130, %133
  %.3208305 = phi i32 [ 1, %133 ], [ 0, %130 ], [ 0, %127 ], [ 0, %124 ]
  %134 = add i64 %.2334, 1
  %.not270 = icmp eq i64 %134, %21
  br i1 %.not270, label %135, label %98, !llvm.loop !30

135:                                              ; preds = %133, %.thread300
  %136 = load i32, ptr %97, align 4, !tbaa !29
  %.not279 = icmp eq i32 %136, 0
  br i1 %.not279, label %.loopexit323, label %137

137:                                              ; preds = %135
  %138 = load i32, ptr %42, align 8, !tbaa !15
  %.not280 = icmp eq i32 %138, 0
  br i1 %.not280, label %.preheader322, label %.loopexit323

.preheader322:                                    ; preds = %137, %153
  %.3335 = phi i64 [ %154, %153 ], [ 0, %137 ]
  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 %.3335, ptr noundef %4)
  %139 = load i16, ptr %14, align 2, !tbaa !24
  %.not282 = icmp eq i16 %139, 0
  br i1 %.not282, label %153, label %140

140:                                              ; preds = %.preheader322
  %141 = load i16, ptr %11, align 2, !tbaa !24
  %142 = load i16, ptr %94, align 8, !tbaa !26
  %143 = icmp eq i16 %141, %142
  br i1 %143, label %144, label %153

144:                                              ; preds = %140
  %145 = load i16, ptr %12, align 2, !tbaa !24
  %146 = load i16, ptr %95, align 2, !tbaa !27
  %147 = icmp eq i16 %145, %146
  br i1 %147, label %148, label %153

148:                                              ; preds = %144
  %149 = load i16, ptr %13, align 2, !tbaa !24
  %150 = load i16, ptr %96, align 4, !tbaa !28
  %151 = icmp eq i16 %149, %150
  br i1 %151, label %152, label %153

152:                                              ; preds = %148
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %97, align 4, !tbaa !29
  br label %153

153:                                              ; preds = %.preheader322, %140, %144, %148, %152
  %154 = add i64 %.3335, 1
  %.not281 = icmp eq i64 %154, %21
  br i1 %.not281, label %.loopexit323, label %.preheader322, !llvm.loop !31

.loopexit323:                                     ; preds = %153, %137, %135
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %11) #4
  br label %.loopexit326

.thread:                                          ; preds = %.loopexit325, %.thread292
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #4
  store i8 0, ptr %15, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #4
  store i8 0, ptr %16, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #4
  store i8 0, ptr %17, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #4
  store i8 0, ptr %18, align 1, !tbaa !19
  %.not253336 = icmp eq i64 %21, 0
  br i1 %.not253336, label %._crit_edge, label %.lr.ph342

.lr.ph342:                                        ; preds = %.thread
  %155 = getelementptr inbounds i8, ptr %0, i64 8
  %156 = getelementptr inbounds i8, ptr %0, i64 10
  %157 = getelementptr inbounds i8, ptr %0, i64 12
  %158 = getelementptr inbounds i8, ptr %0, i64 4
  %159 = getelementptr inbounds i8, ptr %0, i64 24
  br label %160

160:                                              ; preds = %.lr.ph342, %.thread309
  %.4341 = phi i64 [ 0, %.lr.ph342 ], [ %258, %.thread309 ]
  %.3203340 = phi i32 [ %.0200, %.lr.ph342 ], [ %.4204, %.thread309 ]
  %.4209339 = phi i32 [ %.0205, %.lr.ph342 ], [ %.6211, %.thread309 ]
  %.5219338 = phi i32 [ %.2216, %.lr.ph342 ], [ %.6220315, %.thread309 ]
  %.3227.in337 = phi i1 [ %narrow319, %.lr.ph342 ], [ %169, %.thread309 ]
  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 %.4341, ptr noundef %4)
  %.pr = load i32, ptr %25, align 8, !tbaa !5
  %161 = icmp ugt i32 %.pr, 7
  %or.cond356.not = select i1 %.3227.in337, i1 true, i1 %161
  br i1 %or.cond356.not, label %thread-pre-split, label %162

162:                                              ; preds = %160
  %163 = load i8, ptr %15, align 1, !tbaa !19
  %164 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %163)
  %165 = load i32, ptr %25, align 8, !tbaa !5
  %166 = icmp ugt i32 %164, %165
  br i1 %166, label %167, label %thread-pre-split

167:                                              ; preds = %162
  store i32 %164, ptr %25, align 8, !tbaa !5
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %160, %162, %167
  %168 = phi i32 [ %165, %162 ], [ %164, %167 ], [ %.pr, %160 ]
  %169 = icmp uge i32 %168, %24
  %.not255 = icmp eq i32 %.3203340, 0
  br i1 %.not255, label %170, label %177

170:                                              ; preds = %thread-pre-split
  %171 = load i8, ptr %15, align 1, !tbaa !19
  %172 = load i8, ptr %16, align 1, !tbaa !19
  %.not256 = icmp eq i8 %171, %172
  %173 = load i8, ptr %17, align 1
  %.not257 = icmp eq i8 %171, %173
  %or.cond284 = select i1 %.not256, i1 %.not257, i1 false
  br i1 %or.cond284, label %177, label %174

174:                                              ; preds = %170
  store i32 1, ptr %0, align 8, !tbaa !16
  %175 = icmp ult i32 %168, 8
  br i1 %175, label %176, label %177

176:                                              ; preds = %174
  store i32 8, ptr %25, align 8, !tbaa !5
  br label %177

177:                                              ; preds = %170, %174, %176, %thread-pre-split
  %178 = phi i32 [ %168, %thread-pre-split ], [ 8, %176 ], [ %168, %174 ], [ %168, %170 ]
  %179 = phi i1 [ true, %thread-pre-split ], [ true, %176 ], [ true, %174 ], [ false, %170 ]
  %.4204 = phi i32 [ 1, %thread-pre-split ], [ 1, %176 ], [ 1, %174 ], [ 0, %170 ]
  %.not258 = icmp eq i32 %.4209339, 0
  br i1 %.not258, label %180, label %.thread308

180:                                              ; preds = %177
  %181 = load i8, ptr %15, align 1, !tbaa !19
  %182 = load i16, ptr %155, align 8, !tbaa !26
  %183 = zext i8 %181 to i16
  %184 = icmp eq i16 %182, %183
  br i1 %184, label %185, label %195

185:                                              ; preds = %180
  %186 = load i8, ptr %16, align 1, !tbaa !19
  %187 = load i16, ptr %156, align 2, !tbaa !27
  %188 = zext i8 %186 to i16
  %189 = icmp eq i16 %187, %188
  br i1 %189, label %190, label %195

190:                                              ; preds = %185
  %191 = load i8, ptr %17, align 1, !tbaa !19
  %192 = load i16, ptr %157, align 4, !tbaa !28
  %193 = zext i8 %191 to i16
  %194 = icmp eq i16 %192, %193
  br label %195

195:                                              ; preds = %190, %185, %180
  %196 = phi i1 [ false, %185 ], [ false, %180 ], [ %194, %190 ]
  %197 = load i8, ptr %18, align 1, !tbaa !19
  switch i8 %197, label %201 [
    i8 -1, label %212
    i8 0, label %198
  ]

198:                                              ; preds = %195
  %199 = load i32, ptr %158, align 4, !tbaa !29
  %200 = icmp eq i32 %199, 0
  %or.cond13 = select i1 %200, i1 true, i1 %196
  br i1 %or.cond13, label %204, label %201

201:                                              ; preds = %195, %198
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %158, align 4, !tbaa !29
  %202 = icmp ult i32 %178, 8
  br i1 %202, label %203, label %.thread308

203:                                              ; preds = %201
  store i32 8, ptr %25, align 8, !tbaa !5
  br label %.thread308

204:                                              ; preds = %198
  %205 = load i32, ptr %42, align 8, !tbaa !15
  %206 = or i32 %205, %199
  %brmerge355.not = icmp eq i32 %206, 0
  br i1 %brmerge355.not, label %207, label %.thread308

207:                                              ; preds = %204
  store i32 1, ptr %158, align 4, !tbaa !29
  store i16 %183, ptr %155, align 8, !tbaa !26
  %208 = load i8, ptr %16, align 1, !tbaa !19
  %209 = zext i8 %208 to i16
  store i16 %209, ptr %156, align 2, !tbaa !27
  %210 = load i8, ptr %17, align 1, !tbaa !19
  %211 = zext i8 %210 to i16
  store i16 %211, ptr %157, align 4, !tbaa !28
  br label %.thread308

212:                                              ; preds = %195
  %213 = load i32, ptr %158, align 4, !tbaa !29
  %214 = icmp ne i32 %213, 0
  %or.cond15 = select i1 %214, i1 %196, i1 false
  br i1 %or.cond15, label %215, label %.thread308

215:                                              ; preds = %212
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %158, align 4, !tbaa !29
  %216 = icmp ult i32 %178, 8
  br i1 %216, label %217, label %.thread308

217:                                              ; preds = %215
  store i32 8, ptr %25, align 8, !tbaa !5
  br label %.thread308

.thread308:                                       ; preds = %204, %203, %201, %212, %217, %215, %207, %177
  %218 = phi i1 [ true, %177 ], [ true, %203 ], [ true, %201 ], [ true, %217 ], [ true, %215 ], [ false, %212 ], [ false, %207 ], [ false, %204 ]
  %.6211 = phi i32 [ 1, %177 ], [ 1, %203 ], [ 1, %201 ], [ 1, %217 ], [ 1, %215 ], [ 0, %212 ], [ 0, %207 ], [ 0, %204 ]
  %.not263 = icmp eq i32 %.5219338, 0
  br i1 %.not263, label %219, label %256

219:                                              ; preds = %.thread308
  %220 = load i8, ptr %15, align 1, !tbaa !19
  %221 = load i8, ptr %16, align 1, !tbaa !19
  %222 = load i8, ptr %17, align 1, !tbaa !19
  %223 = load i8, ptr %18, align 1, !tbaa !19
  %224 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef nonnull %6, i8 noundef zeroext %220, i8 noundef zeroext %221, i8 noundef zeroext %222, i8 noundef zeroext %223)
  %.not264 = icmp eq i32 %224, 0
  br i1 %.not264, label %225, label %.thread309

225:                                              ; preds = %219
  %226 = load i8, ptr %15, align 1, !tbaa !19
  %227 = load i8, ptr %16, align 1, !tbaa !19
  %228 = load i8, ptr %17, align 1, !tbaa !19
  %229 = load i8, ptr %18, align 1, !tbaa !19
  %230 = load i32, ptr %48, align 4, !tbaa !12
  %231 = call noundef i32 @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %226, i8 noundef zeroext %227, i8 noundef zeroext %228, i8 noundef zeroext %229, i32 noundef %230)
  %.not265 = icmp eq i32 %231, 0
  br i1 %.not265, label %232, label %.loopexit321

232:                                              ; preds = %225
  %233 = load i32, ptr %48, align 4, !tbaa !12
  %234 = icmp ult i32 %233, 256
  br i1 %234, label %235, label %252

235:                                              ; preds = %232
  %236 = load i8, ptr %15, align 1, !tbaa !19
  %237 = shl nuw nsw i32 %233, 2
  %238 = zext nneg i32 %237 to i64
  %239 = getelementptr inbounds i8, ptr %159, i64 %238
  store i8 %236, ptr %239, align 1, !tbaa !19
  %240 = load i8, ptr %16, align 1, !tbaa !19
  %241 = or disjoint i32 %237, 1
  %242 = zext nneg i32 %241 to i64
  %243 = getelementptr inbounds i8, ptr %159, i64 %242
  store i8 %240, ptr %243, align 1, !tbaa !19
  %244 = load i8, ptr %17, align 1, !tbaa !19
  %245 = or disjoint i32 %237, 2
  %246 = zext nneg i32 %245 to i64
  %247 = getelementptr inbounds i8, ptr %159, i64 %246
  store i8 %244, ptr %247, align 1, !tbaa !19
  %248 = load i8, ptr %18, align 1, !tbaa !19
  %249 = or disjoint i32 %237, 3
  %250 = zext nneg i32 %249 to i64
  %251 = getelementptr inbounds i8, ptr %159, i64 %250
  store i8 %248, ptr %251, align 1, !tbaa !19
  br label %252

252:                                              ; preds = %235, %232
  %253 = add i32 %233, 1
  store i32 %253, ptr %48, align 4, !tbaa !12
  %254 = icmp uge i32 %253, %.0221
  %255 = zext i1 %254 to i32
  br label %256

256:                                              ; preds = %252, %.thread308
  %.6220 = phi i32 [ 1, %.thread308 ], [ %255, %252 ]
  %257 = icmp ne i32 %.6220, 0
  %or.cond17 = select i1 %218, i1 %257, i1 false
  %or.cond19 = and i1 %179, %or.cond17
  %or.cond21 = select i1 %or.cond19, i1 %169, i1 false
  br i1 %or.cond21, label %._crit_edge, label %.thread309

.thread309:                                       ; preds = %219, %256
  %.6220315 = phi i32 [ %.6220, %256 ], [ 0, %219 ]
  %258 = add nuw i64 %.4341, 1
  %.not253 = icmp eq i64 %258, %21
  br i1 %.not253, label %._crit_edge, label %160, !llvm.loop !32

._crit_edge:                                      ; preds = %.thread309, %256, %.thread
  %259 = getelementptr inbounds i8, ptr %0, i64 4
  %260 = load i32, ptr %259, align 4, !tbaa !29
  %.not266 = icmp eq i32 %260, 0
  br i1 %.not266, label %.loopexit, label %261

261:                                              ; preds = %._crit_edge
  %262 = load i32, ptr %42, align 8, !tbaa !15
  %.not267 = icmp ne i32 %262, 0
  %or.cond347 = or i1 %.not267, %.not253336
  br i1 %or.cond347, label %.loopexit, label %.lr.ph346

.lr.ph346:                                        ; preds = %261
  %263 = getelementptr inbounds i8, ptr %0, i64 8
  %264 = getelementptr inbounds i8, ptr %0, i64 10
  %265 = getelementptr inbounds i8, ptr %0, i64 12
  br label %266

266:                                              ; preds = %.lr.ph346, %287
  %.5345 = phi i64 [ 0, %.lr.ph346 ], [ %288, %287 ]
  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 %.5345, ptr noundef %4)
  %267 = load i8, ptr %18, align 1, !tbaa !19
  %.not269 = icmp eq i8 %267, 0
  br i1 %.not269, label %287, label %268

268:                                              ; preds = %266
  %269 = load i8, ptr %15, align 1, !tbaa !19
  %270 = load i16, ptr %263, align 8, !tbaa !26
  %271 = zext i8 %269 to i16
  %272 = icmp eq i16 %270, %271
  br i1 %272, label %273, label %287

273:                                              ; preds = %268
  %274 = load i8, ptr %16, align 1, !tbaa !19
  %275 = load i16, ptr %264, align 2, !tbaa !27
  %276 = zext i8 %274 to i16
  %277 = icmp eq i16 %275, %276
  br i1 %277, label %278, label %287

278:                                              ; preds = %273
  %279 = load i8, ptr %17, align 1, !tbaa !19
  %280 = load i16, ptr %265, align 4, !tbaa !28
  %281 = zext i8 %279 to i16
  %282 = icmp eq i16 %280, %281
  br i1 %282, label %283, label %287

283:                                              ; preds = %278
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %259, align 4, !tbaa !29
  %284 = load i32, ptr %25, align 8, !tbaa !5
  %285 = icmp ult i32 %284, 8
  br i1 %285, label %286, label %287

286:                                              ; preds = %283
  store i32 8, ptr %25, align 8, !tbaa !5
  br label %287

287:                                              ; preds = %266, %268, %273, %278, %286, %283
  %288 = add nuw i64 %.5345, 1
  %.not268 = icmp eq i64 %288, %21
  br i1 %.not268, label %.loopexit, label %266, !llvm.loop !33

.loopexit:                                        ; preds = %287, %261, %._crit_edge
  %289 = getelementptr inbounds i8, ptr %0, i64 8
  %290 = load <2 x i16>, ptr %289, align 8, !tbaa !24
  %291 = mul <2 x i16> %290, <i16 257, i16 257>
  store <2 x i16> %291, ptr %289, align 8, !tbaa !24
  %292 = getelementptr inbounds i8, ptr %0, i64 12
  %293 = load i16, ptr %292, align 4, !tbaa !28
  %294 = mul i16 %293, 257
  store i16 %294, ptr %292, align 4, !tbaa !28
  br label %.loopexit321

.loopexit321:                                     ; preds = %225, %.loopexit
  %.5199 = phi i32 [ 0, %.loopexit ], [ %231, %225 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #4
  br label %.loopexit326

.loopexit326:                                     ; preds = %57, %.loopexit321, %.loopexit323
  %.6 = phi i32 [ 0, %.loopexit323 ], [ %.5199, %.loopexit321 ], [ %68, %57 ]
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef nonnull %6)
  call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %6) #4
  ret i32 %.6
}

; 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

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

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 1048}
!6 = !{!"_ZTS17LodePNGColorStats", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 10, !10, i64 12, !7, i64 16, !7, i64 20, !8, i64 24, !7, i64 1048, !11, i64 1056, !7, i64 1064, !7, i64 1068}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!6, !7, i64 20}
!13 = !{!6, !11, i64 1056}
!14 = !{!6, !7, i64 1064}
!15 = !{!6, !7, i64 16}
!16 = !{!6, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!8, !8, i64 0}
!20 = !{!21, !7, i64 4}
!21 = !{!"_ZTS16LodePNGColorMode", !22, i64 0, !7, i64 4, !23, i64 8, !11, i64 16, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36}
!22 = !{!"_ZTS16LodePNGColorType", !8, i64 0}
!23 = !{!"any pointer", !8, i64 0}
!24 = !{!10, !10, i64 0}
!25 = distinct !{!25, !18}
!26 = !{!6, !10, i64 8}
!27 = !{!6, !10, i64 10}
!28 = !{!6, !10, i64 12}
!29 = !{!6, !7, i64 4}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}


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