; LLVM IR from fhanau/Efficient-Compression-Tool :: 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 }
%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 nounwind uwtable
declare dso_local noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef) #1

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

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

; 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) #1

; 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) #1

; 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) #2

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

; 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) #2 {
  %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 i64, align 8
  %12 = alloca %struct.ColorTree, align 8
  %13 = alloca i64, align 8
  %14 = alloca i32, align 4
  %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 i16, align 2
  %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 i32, align 4
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i8, align 1
  %39 = alloca i8, align 1
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  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 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 136, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %42 = load i32, ptr %8, align 4, !tbaa !9
  %43 = zext i32 %42 to i64
  %44 = load i32, ptr %9, align 4, !tbaa !9
  %45 = zext i32 %44 to i64
  %46 = mul i64 %43, %45
  store i64 %46, ptr %13, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %47 = load ptr, ptr %10, 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 %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %52 = load ptr, ptr %10, 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 %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %57 = load ptr, ptr %10, align 8, !tbaa !5
  %58 = call noundef i32 @_ZL15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %57)
  store i32 %58, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %59 = load i32, ptr %17, align 4, !tbaa !9
  %60 = icmp eq i32 %59, 1
  %61 = zext i1 %60 to i64
  %62 = select i1 %60, i32 1, i32 0
  store i32 %62, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 257, ptr %20, align 4, !tbaa !9
  %63 = load i32, ptr %17, align 4, !tbaa !9
  %64 = icmp ule i32 %63, 8
  br i1 %64, label %65, label %82

65:                                               ; preds = %5
  %66 = load i32, ptr %17, align 4, !tbaa !9
  %67 = icmp eq i32 %66, 1
  br i1 %67, label %68, label %69

68:                                               ; preds = %65
  br label %80

69:                                               ; preds = %65
  %70 = load i32, ptr %17, align 4, !tbaa !9
  %71 = icmp eq i32 %70, 2
  br i1 %71, label %72, label %73

72:                                               ; preds = %69
  br label %78

73:                                               ; preds = %69
  %74 = load i32, ptr %17, align 4, !tbaa !9
  %75 = icmp eq i32 %74, 4
  %76 = zext i1 %75 to i64
  %77 = select i1 %75, i32 16, i32 256
  br label %78

78:                                               ; preds = %73, %72
  %79 = phi i32 [ 4, %72 ], [ %77, %73 ]
  br label %80

80:                                               ; preds = %78, %68
  %81 = phi i32 [ 2, %68 ], [ %79, %78 ]
  store i32 %81, ptr %20, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %80, %5
  %83 = load i64, ptr %13, align 8, !tbaa !11
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.LodePNGColorStats, ptr %84, i32 0, i32 9
  %86 = load i64, ptr %85, align 8, !tbaa !13
  %87 = add i64 %86, %83
  store i64 %87, ptr %85, align 8, !tbaa !13
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.LodePNGColorMode, ptr %88, i32 0, i32 1
  %90 = load i32, ptr %89, align 4, !tbaa !16
  %91 = icmp eq i32 %90, 16
  br i1 %91, label %92, label %144

92:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #4
  store i16 0, ptr %21, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #4
  store i16 0, ptr %22, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #4
  store i16 0, ptr %23, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #4
  store i16 0, ptr %24, align 2, !tbaa !19
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %93

93:                                               ; preds = %140, %92
  %94 = load i64, ptr %11, align 8, !tbaa !11
  %95 = load i64, ptr %13, align 8, !tbaa !11
  %96 = icmp ne i64 %94, %95
  br i1 %96, label %97, label %143

97:                                               ; preds = %93
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = load i64, ptr %11, align 8, !tbaa !11
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %98, i64 noundef %99, ptr noundef %100)
  %101 = load i16, ptr %21, align 2, !tbaa !19
  %102 = zext i16 %101 to i32
  %103 = and i32 %102, 255
  %104 = load i16, ptr %21, align 2, !tbaa !19
  %105 = zext i16 %104 to i32
  %106 = ashr i32 %105, 8
  %107 = and i32 %106, 255
  %108 = icmp ne i32 %103, %107
  br i1 %108, label %136, label %109

109:                                              ; preds = %97
  %110 = load i16, ptr %22, align 2, !tbaa !19
  %111 = zext i16 %110 to i32
  %112 = and i32 %111, 255
  %113 = load i16, ptr %22, align 2, !tbaa !19
  %114 = zext i16 %113 to i32
  %115 = ashr i32 %114, 8
  %116 = and i32 %115, 255
  %117 = icmp ne i32 %112, %116
  br i1 %117, label %136, label %118

118:                                              ; preds = %109
  %119 = load i16, ptr %23, align 2, !tbaa !19
  %120 = zext i16 %119 to i32
  %121 = and i32 %120, 255
  %122 = load i16, ptr %23, align 2, !tbaa !19
  %123 = zext i16 %122 to i32
  %124 = ashr i32 %123, 8
  %125 = and i32 %124, 255
  %126 = icmp ne i32 %121, %125
  br i1 %126, label %136, label %127

127:                                              ; preds = %118
  %128 = load i16, ptr %24, align 2, !tbaa !19
  %129 = zext i16 %128 to i32
  %130 = and i32 %129, 255
  %131 = load i16, ptr %24, align 2, !tbaa !19
  %132 = zext i16 %131 to i32
  %133 = ashr i32 %132, 8
  %134 = and i32 %133, 255
  %135 = icmp ne i32 %130, %134
  br i1 %135, label %136, label %139

136:                                              ; preds = %127, %118, %109, %97
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.LodePNGColorStats, ptr %137, i32 0, i32 8
  store i32 16, ptr %138, align 8, !tbaa !20
  store i32 1, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %18, align 4, !tbaa !9
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %143

139:                                              ; preds = %127
  br label %140

140:                                              ; preds = %139
  %141 = load i64, ptr %11, align 8, !tbaa !11
  %142 = add i64 %141, 1
  store i64 %142, ptr %11, align 8, !tbaa !11
  br label %93, !llvm.loop !21

143:                                              ; preds = %136, %93
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #4
  br label %144

144:                                              ; preds = %143, %82
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %147, label %343

147:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #4
  store i16 0, ptr %25, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #4
  store i16 0, ptr %26, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #4
  store i16 0, ptr %27, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #4
  store i16 0, ptr %28, align 2, !tbaa !19
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %148

148:                                              ; preds = %283, %147
  %149 = load i64, ptr %11, align 8, !tbaa !11
  %150 = load i64, ptr %13, align 8, !tbaa !11
  %151 = icmp ne i64 %149, %150
  br i1 %151, label %152, label %286

152:                                              ; preds = %148
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = load i64, ptr %11, align 8, !tbaa !11
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %25, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %153, i64 noundef %154, ptr noundef %155)
  %156 = load i32, ptr %14, align 4, !tbaa !9
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %173, label %158

158:                                              ; preds = %152
  %159 = load i16, ptr %25, align 2, !tbaa !19
  %160 = zext i16 %159 to i32
  %161 = load i16, ptr %26, align 2, !tbaa !19
  %162 = zext i16 %161 to i32
  %163 = icmp ne i32 %160, %162
  br i1 %163, label %170, label %164

164:                                              ; preds = %158
  %165 = load i16, ptr %25, align 2, !tbaa !19
  %166 = zext i16 %165 to i32
  %167 = load i16, ptr %27, align 2, !tbaa !19
  %168 = zext i16 %167 to i32
  %169 = icmp ne i32 %166, %168
  br i1 %169, label %170, label %173

170:                                              ; preds = %164, %158
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.LodePNGColorStats, ptr %171, i32 0, i32 0
  store i32 1, ptr %172, align 8, !tbaa !23
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %170, %164, %152
  %174 = load i32, ptr %15, align 4, !tbaa !9
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %269, label %176

176:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %177 = load i16, ptr %25, align 2, !tbaa !19
  %178 = zext i16 %177 to i32
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.LodePNGColorStats, ptr %179, i32 0, i32 2
  %181 = load i16, ptr %180, align 8, !tbaa !24
  %182 = zext i16 %181 to i32
  %183 = icmp eq i32 %178, %182
  br i1 %183, label %184, label %200

184:                                              ; preds = %176
  %185 = load i16, ptr %26, align 2, !tbaa !19
  %186 = zext i16 %185 to i32
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.LodePNGColorStats, ptr %187, i32 0, i32 3
  %189 = load i16, ptr %188, align 2, !tbaa !25
  %190 = zext i16 %189 to i32
  %191 = icmp eq i32 %186, %190
  br i1 %191, label %192, label %200

192:                                              ; preds = %184
  %193 = load i16, ptr %27, align 2, !tbaa !19
  %194 = zext i16 %193 to i32
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.LodePNGColorStats, ptr %195, i32 0, i32 4
  %197 = load i16, ptr %196, align 4, !tbaa !26
  %198 = zext i16 %197 to i32
  %199 = icmp eq i32 %194, %198
  br label %200

200:                                              ; preds = %192, %184, %176
  %201 = phi i1 [ false, %184 ], [ false, %176 ], [ %199, %192 ]
  %202 = zext i1 %201 to i32
  store i32 %202, ptr %29, align 4, !tbaa !9
  %203 = load i16, ptr %28, align 2, !tbaa !19
  %204 = zext i16 %203 to i32
  %205 = icmp ne i32 %204, 65535
  br i1 %205, label %206, label %223

206:                                              ; preds = %200
  %207 = load i16, ptr %28, align 2, !tbaa !19
  %208 = zext i16 %207 to i32
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %218, label %210

210:                                              ; preds = %206
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.LodePNGColorStats, ptr %211, i32 0, i32 1
  %213 = load i32, ptr %212, align 4, !tbaa !27
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %223

215:                                              ; preds = %210
  %216 = load i32, ptr %29, align 4, !tbaa !9
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %223, label %218

218:                                              ; preds = %215, %206
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.LodePNGColorStats, ptr %219, i32 0, i32 5
  store i32 1, ptr %220, align 8, !tbaa !28
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.LodePNGColorStats, ptr %221, i32 0, i32 1
  store i32 0, ptr %222, align 4, !tbaa !27
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %268

223:                                              ; preds = %215, %210, %200
  %224 = load i16, ptr %28, align 2, !tbaa !19
  %225 = zext i16 %224 to i32
  %226 = icmp eq i32 %225, 0
  br i1 %226, label %227, label %249

227:                                              ; preds = %223
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.LodePNGColorStats, ptr %228, i32 0, i32 5
  %230 = load i32, ptr %229, align 8, !tbaa !28
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %249, label %232

232:                                              ; preds = %227
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.LodePNGColorStats, ptr %233, i32 0, i32 1
  %235 = load i32, ptr %234, align 4, !tbaa !27
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %249, label %237

237:                                              ; preds = %232
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.LodePNGColorStats, ptr %238, i32 0, i32 1
  store i32 1, ptr %239, align 4, !tbaa !27
  %240 = load i16, ptr %25, align 2, !tbaa !19
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.LodePNGColorStats, ptr %241, i32 0, i32 2
  store i16 %240, ptr %242, align 8, !tbaa !24
  %243 = load i16, ptr %26, align 2, !tbaa !19
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.LodePNGColorStats, ptr %244, i32 0, i32 3
  store i16 %243, ptr %245, align 2, !tbaa !25
  %246 = load i16, ptr %27, align 2, !tbaa !19
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.LodePNGColorStats, ptr %247, i32 0, i32 4
  store i16 %246, ptr %248, align 4, !tbaa !26
  br label %267

249:                                              ; preds = %232, %227, %223
  %250 = load i16, ptr %28, align 2, !tbaa !19
  %251 = zext i16 %250 to i32
  %252 = icmp eq i32 %251, 65535
  br i1 %252, label %253, label %266

253:                                              ; preds = %249
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.LodePNGColorStats, ptr %254, i32 0, i32 1
  %256 = load i32, ptr %255, align 4, !tbaa !27
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %258, label %266

258:                                              ; preds = %253
  %259 = load i32, ptr %29, align 4, !tbaa !9
  %260 = icmp ne i32 %259, 0
  br i1 %260, label %261, label %266

261:                                              ; preds = %258
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.LodePNGColorStats, ptr %262, i32 0, i32 5
  store i32 1, ptr %263, align 8, !tbaa !28
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.LodePNGColorStats, ptr %264, i32 0, i32 1
  store i32 0, ptr %265, align 4, !tbaa !27
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %266

266:                                              ; preds = %261, %258, %253, %249
  br label %267

267:                                              ; preds = %266, %237
  br label %268

268:                                              ; preds = %267, %218
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %269

269:                                              ; preds = %268, %173
  %270 = load i32, ptr %15, align 4, !tbaa !9
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %282

272:                                              ; preds = %269
  %273 = load i32, ptr %16, align 4, !tbaa !9
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %282

275:                                              ; preds = %272
  %276 = load i32, ptr %14, align 4, !tbaa !9
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %282

278:                                              ; preds = %275
  %279 = load i32, ptr %18, align 4, !tbaa !9
  %280 = icmp ne i32 %279, 0
  br i1 %280, label %281, label %282

281:                                              ; preds = %278
  br label %286

282:                                              ; preds = %278, %275, %272, %269
  br label %283

283:                                              ; preds = %282
  %284 = load i64, ptr %11, align 8, !tbaa !11
  %285 = add i64 %284, 1
  store i64 %285, ptr %11, align 8, !tbaa !11
  br label %148, !llvm.loop !29

286:                                              ; preds = %281, %148
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.LodePNGColorStats, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !27
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %342

291:                                              ; preds = %286
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.LodePNGColorStats, ptr %292, i32 0, i32 5
  %294 = load i32, ptr %293, align 8, !tbaa !28
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %342, label %296

296:                                              ; preds = %291
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %297

297:                                              ; preds = %338, %296
  %298 = load i64, ptr %11, align 8, !tbaa !11
  %299 = load i64, ptr %13, align 8, !tbaa !11
  %300 = icmp ne i64 %298, %299
  br i1 %300, label %301, label %341

301:                                              ; preds = %297
  %302 = load ptr, ptr %7, align 8, !tbaa !5
  %303 = load i64, ptr %11, align 8, !tbaa !11
  %304 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %25, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %302, i64 noundef %303, ptr noundef %304)
  %305 = load i16, ptr %28, align 2, !tbaa !19
  %306 = zext i16 %305 to i32
  %307 = icmp ne i32 %306, 0
  br i1 %307, label %308, label %337

308:                                              ; preds = %301
  %309 = load i16, ptr %25, align 2, !tbaa !19
  %310 = zext i16 %309 to i32
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.LodePNGColorStats, ptr %311, i32 0, i32 2
  %313 = load i16, ptr %312, align 8, !tbaa !24
  %314 = zext i16 %313 to i32
  %315 = icmp eq i32 %310, %314
  br i1 %315, label %316, label %337

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

324:                                              ; preds = %316
  %325 = load i16, ptr %27, align 2, !tbaa !19
  %326 = zext i16 %325 to i32
  %327 = load ptr, ptr %6, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.LodePNGColorStats, ptr %327, i32 0, i32 4
  %329 = load i16, ptr %328, align 4, !tbaa !26
  %330 = zext i16 %329 to i32
  %331 = icmp eq i32 %326, %330
  br i1 %331, label %332, label %337

332:                                              ; preds = %324
  %333 = load ptr, ptr %6, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.LodePNGColorStats, ptr %333, i32 0, i32 5
  store i32 1, ptr %334, align 8, !tbaa !28
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.LodePNGColorStats, ptr %335, i32 0, i32 1
  store i32 0, ptr %336, align 4, !tbaa !27
  br label %337

337:                                              ; preds = %332, %324, %316, %308, %301
  br label %338

338:                                              ; preds = %337
  %339 = load i64, ptr %11, align 8, !tbaa !11
  %340 = add i64 %339, 1
  store i64 %340, ptr %11, align 8, !tbaa !11
  br label %297, !llvm.loop !30

341:                                              ; preds = %297
  br label %342

342:                                              ; preds = %341, %291, %286
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #4
  br label %728

343:                                              ; preds = %144
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef %12)
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #4
  store i8 0, ptr %30, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #4
  store i8 0, ptr %31, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #4
  store i8 0, ptr %32, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #4
  store i8 0, ptr %33, align 1, !tbaa !31
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %344

344:                                              ; preds = %627, %343
  %345 = load i64, ptr %11, align 8, !tbaa !11
  %346 = load i64, ptr %13, align 8, !tbaa !11
  %347 = icmp ne i64 %345, %346
  br i1 %347, label %348, label %630

348:                                              ; preds = %344
  %349 = load i64, ptr %11, align 8, !tbaa !11
  %350 = icmp ugt i64 %349, 0
  br i1 %350, label %351, label %374

351:                                              ; preds = %348
  %352 = load ptr, ptr %10, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.LodePNGColorMode, ptr %352, i32 0, i32 0
  %354 = load i32, ptr %353, align 8, !tbaa !32
  %355 = icmp eq i32 %354, 6
  br i1 %355, label %356, label %374

356:                                              ; preds = %351
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.LodePNGColorMode, ptr %357, i32 0, i32 1
  %359 = load i32, ptr %358, align 4, !tbaa !16
  %360 = icmp eq i32 %359, 8
  br i1 %360, label %361, label %374

361:                                              ; preds = %356
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = load i64, ptr %11, align 8, !tbaa !11
  %364 = mul i64 %363, 4
  %365 = getelementptr inbounds i8, ptr %362, i64 %364
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  %367 = load i64, ptr %11, align 8, !tbaa !11
  %368 = mul i64 %367, 4
  %369 = getelementptr inbounds i8, ptr %366, i64 %368
  %370 = getelementptr inbounds i8, ptr %369, i64 -4
  %371 = call i32 @memcmp(ptr noundef %365, ptr noundef %370, i64 noundef 4) #5
  %372 = icmp eq i32 %371, 0
  br i1 %372, label %373, label %374

373:                                              ; preds = %361
  br label %627

374:                                              ; preds = %361, %356, %351, %348
  %375 = load ptr, ptr %7, align 8, !tbaa !5
  %376 = load i64, ptr %11, align 8, !tbaa !11
  %377 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %375, i64 noundef %376, ptr noundef %377)
  %378 = load i32, ptr %18, align 4, !tbaa !9
  %379 = icmp ne i32 %378, 0
  br i1 %379, label %398, label %380

380:                                              ; preds = %374
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.LodePNGColorStats, ptr %381, i32 0, i32 8
  %383 = load i32, ptr %382, align 8, !tbaa !20
  %384 = icmp ult i32 %383, 8
  br i1 %384, label %385, label %398

385:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %386 = load i8, ptr %30, align 1, !tbaa !31
  %387 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %386)
  store i32 %387, ptr %34, align 4, !tbaa !9
  %388 = load i32, ptr %34, align 4, !tbaa !9
  %389 = load ptr, ptr %6, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.LodePNGColorStats, ptr %389, i32 0, i32 8
  %391 = load i32, ptr %390, align 8, !tbaa !20
  %392 = icmp ugt i32 %388, %391
  br i1 %392, label %393, label %397

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

397:                                              ; preds = %393, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %398

398:                                              ; preds = %397, %380, %374
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.LodePNGColorStats, ptr %399, i32 0, i32 8
  %401 = load i32, ptr %400, align 8, !tbaa !20
  %402 = load i32, ptr %17, align 4, !tbaa !9
  %403 = icmp uge i32 %401, %402
  %404 = zext i1 %403 to i32
  store i32 %404, ptr %18, align 4, !tbaa !9
  %405 = load i32, ptr %14, align 4, !tbaa !9
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %430, label %407

407:                                              ; preds = %398
  %408 = load i8, ptr %30, align 1, !tbaa !31
  %409 = zext i8 %408 to i32
  %410 = load i8, ptr %31, align 1, !tbaa !31
  %411 = zext i8 %410 to i32
  %412 = icmp ne i32 %409, %411
  br i1 %412, label %419, label %413

413:                                              ; preds = %407
  %414 = load i8, ptr %30, align 1, !tbaa !31
  %415 = zext i8 %414 to i32
  %416 = load i8, ptr %32, align 1, !tbaa !31
  %417 = zext i8 %416 to i32
  %418 = icmp ne i32 %415, %417
  br i1 %418, label %419, label %430

419:                                              ; preds = %413, %407
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.LodePNGColorStats, ptr %420, i32 0, i32 0
  store i32 1, ptr %421, align 8, !tbaa !23
  store i32 1, ptr %14, align 4, !tbaa !9
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.LodePNGColorStats, ptr %422, i32 0, i32 8
  %424 = load i32, ptr %423, align 8, !tbaa !20
  %425 = icmp ult i32 %424, 8
  br i1 %425, label %426, label %429

426:                                              ; preds = %419
  %427 = load ptr, ptr %6, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.LodePNGColorStats, ptr %427, i32 0, i32 8
  store i32 8, ptr %428, align 8, !tbaa !20
  br label %429

429:                                              ; preds = %426, %419
  br label %430

430:                                              ; preds = %429, %413, %398
  %431 = load i32, ptr %15, align 4, !tbaa !9
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %545, label %433

433:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %434 = load i8, ptr %30, align 1, !tbaa !31
  %435 = zext i8 %434 to i32
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.LodePNGColorStats, ptr %436, i32 0, i32 2
  %438 = load i16, ptr %437, align 8, !tbaa !24
  %439 = zext i16 %438 to i32
  %440 = icmp eq i32 %435, %439
  br i1 %440, label %441, label %457

441:                                              ; preds = %433
  %442 = load i8, ptr %31, align 1, !tbaa !31
  %443 = zext i8 %442 to i32
  %444 = load ptr, ptr %6, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.LodePNGColorStats, ptr %444, i32 0, i32 3
  %446 = load i16, ptr %445, align 2, !tbaa !25
  %447 = zext i16 %446 to i32
  %448 = icmp eq i32 %443, %447
  br i1 %448, label %449, label %457

449:                                              ; preds = %441
  %450 = load i8, ptr %32, align 1, !tbaa !31
  %451 = zext i8 %450 to i32
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.LodePNGColorStats, ptr %452, i32 0, i32 4
  %454 = load i16, ptr %453, align 4, !tbaa !26
  %455 = zext i16 %454 to i32
  %456 = icmp eq i32 %451, %455
  br label %457

457:                                              ; preds = %449, %441, %433
  %458 = phi i1 [ false, %441 ], [ false, %433 ], [ %456, %449 ]
  %459 = zext i1 %458 to i32
  store i32 %459, ptr %35, align 4, !tbaa !9
  %460 = load i8, ptr %33, align 1, !tbaa !31
  %461 = zext i8 %460 to i32
  %462 = icmp ne i32 %461, 255
  br i1 %462, label %463, label %488

463:                                              ; preds = %457
  %464 = load i8, ptr %33, align 1, !tbaa !31
  %465 = zext i8 %464 to i32
  %466 = icmp ne i32 %465, 0
  br i1 %466, label %475, label %467

467:                                              ; preds = %463
  %468 = load ptr, ptr %6, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.LodePNGColorStats, ptr %468, i32 0, i32 1
  %470 = load i32, ptr %469, align 4, !tbaa !27
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %472, label %488

472:                                              ; preds = %467
  %473 = load i32, ptr %35, align 4, !tbaa !9
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %488, label %475

475:                                              ; preds = %472, %463
  %476 = load ptr, ptr %6, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.LodePNGColorStats, ptr %476, i32 0, i32 5
  store i32 1, ptr %477, align 8, !tbaa !28
  %478 = load ptr, ptr %6, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.LodePNGColorStats, ptr %478, i32 0, i32 1
  store i32 0, ptr %479, align 4, !tbaa !27
  store i32 1, ptr %15, align 4, !tbaa !9
  %480 = load ptr, ptr %6, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.LodePNGColorStats, ptr %480, i32 0, i32 8
  %482 = load i32, ptr %481, align 8, !tbaa !20
  %483 = icmp ult i32 %482, 8
  br i1 %483, label %484, label %487

484:                                              ; preds = %475
  %485 = load ptr, ptr %6, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.LodePNGColorStats, ptr %485, i32 0, i32 8
  store i32 8, ptr %486, align 8, !tbaa !20
  br label %487

487:                                              ; preds = %484, %475
  br label %544

488:                                              ; preds = %472, %467, %457
  %489 = load i8, ptr %33, align 1, !tbaa !31
  %490 = zext i8 %489 to i32
  %491 = icmp eq i32 %490, 0
  br i1 %491, label %492, label %517

492:                                              ; preds = %488
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.LodePNGColorStats, ptr %493, i32 0, i32 5
  %495 = load i32, ptr %494, align 8, !tbaa !28
  %496 = icmp ne i32 %495, 0
  br i1 %496, label %517, label %497

497:                                              ; preds = %492
  %498 = load ptr, ptr %6, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.LodePNGColorStats, ptr %498, i32 0, i32 1
  %500 = load i32, ptr %499, align 4, !tbaa !27
  %501 = icmp ne i32 %500, 0
  br i1 %501, label %517, label %502

502:                                              ; preds = %497
  %503 = load ptr, ptr %6, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.LodePNGColorStats, ptr %503, i32 0, i32 1
  store i32 1, ptr %504, align 4, !tbaa !27
  %505 = load i8, ptr %30, align 1, !tbaa !31
  %506 = zext i8 %505 to i16
  %507 = load ptr, ptr %6, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.LodePNGColorStats, ptr %507, i32 0, i32 2
  store i16 %506, ptr %508, align 8, !tbaa !24
  %509 = load i8, ptr %31, align 1, !tbaa !31
  %510 = zext i8 %509 to i16
  %511 = load ptr, ptr %6, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.LodePNGColorStats, ptr %511, i32 0, i32 3
  store i16 %510, ptr %512, align 2, !tbaa !25
  %513 = load i8, ptr %32, align 1, !tbaa !31
  %514 = zext i8 %513 to i16
  %515 = load ptr, ptr %6, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.LodePNGColorStats, ptr %515, i32 0, i32 4
  store i16 %514, ptr %516, align 4, !tbaa !26
  br label %543

517:                                              ; preds = %497, %492, %488
  %518 = load i8, ptr %33, align 1, !tbaa !31
  %519 = zext i8 %518 to i32
  %520 = icmp eq i32 %519, 255
  br i1 %520, label %521, label %542

521:                                              ; preds = %517
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.LodePNGColorStats, ptr %522, i32 0, i32 1
  %524 = load i32, ptr %523, align 4, !tbaa !27
  %525 = icmp ne i32 %524, 0
  br i1 %525, label %526, label %542

526:                                              ; preds = %521
  %527 = load i32, ptr %35, align 4, !tbaa !9
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %542

529:                                              ; preds = %526
  %530 = load ptr, ptr %6, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.LodePNGColorStats, ptr %530, i32 0, i32 5
  store i32 1, ptr %531, align 8, !tbaa !28
  %532 = load ptr, ptr %6, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.LodePNGColorStats, ptr %532, i32 0, i32 1
  store i32 0, ptr %533, align 4, !tbaa !27
  store i32 1, ptr %15, align 4, !tbaa !9
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.LodePNGColorStats, ptr %534, i32 0, i32 8
  %536 = load i32, ptr %535, align 8, !tbaa !20
  %537 = icmp ult i32 %536, 8
  br i1 %537, label %538, label %541

538:                                              ; preds = %529
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.LodePNGColorStats, ptr %539, i32 0, i32 8
  store i32 8, ptr %540, align 8, !tbaa !20
  br label %541

541:                                              ; preds = %538, %529
  br label %542

542:                                              ; preds = %541, %526, %521, %517
  br label %543

543:                                              ; preds = %542, %502
  br label %544

544:                                              ; preds = %543, %487
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %545

545:                                              ; preds = %544, %430
  %546 = load i32, ptr %16, align 4, !tbaa !9
  %547 = icmp ne i32 %546, 0
  br i1 %547, label %613, label %548

548:                                              ; preds = %545
  %549 = load i8, ptr %30, align 1, !tbaa !31
  %550 = load i8, ptr %31, align 1, !tbaa !31
  %551 = load i8, ptr %32, align 1, !tbaa !31
  %552 = load i8, ptr %33, align 1, !tbaa !31
  %553 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef %12, i8 noundef zeroext %549, i8 noundef zeroext %550, i8 noundef zeroext %551, i8 noundef zeroext %552)
  %554 = icmp ne i32 %553, 0
  br i1 %554, label %612, label %555

555:                                              ; preds = %548
  %556 = load i8, ptr %30, align 1, !tbaa !31
  %557 = load i8, ptr %31, align 1, !tbaa !31
  %558 = load i8, ptr %32, align 1, !tbaa !31
  %559 = load i8, ptr %33, align 1, !tbaa !31
  %560 = load ptr, ptr %6, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.LodePNGColorStats, ptr %560, i32 0, i32 6
  %562 = load i32, ptr %561, align 4, !tbaa !33
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %12, i8 noundef zeroext %556, i8 noundef zeroext %557, i8 noundef zeroext %558, i8 noundef zeroext %559, i32 noundef %562)
  %563 = load ptr, ptr %6, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.LodePNGColorStats, ptr %563, i32 0, i32 6
  %565 = load i32, ptr %564, align 4, !tbaa !33
  %566 = icmp ult i32 %565, 256
  br i1 %566, label %567, label %601

567:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %568 = load ptr, ptr %6, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.LodePNGColorStats, ptr %568, i32 0, i32 7
  %570 = getelementptr inbounds [1024 x i8], ptr %569, i64 0, i64 0
  store ptr %570, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %571 = load ptr, ptr %6, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.LodePNGColorStats, ptr %571, i32 0, i32 6
  %573 = load i32, ptr %572, align 4, !tbaa !33
  store i32 %573, ptr %37, align 4, !tbaa !9
  %574 = load i8, ptr %30, align 1, !tbaa !31
  %575 = load ptr, ptr %36, align 8, !tbaa !5
  %576 = load i32, ptr %37, align 4, !tbaa !9
  %577 = mul i32 %576, 4
  %578 = zext i32 %577 to i64
  %579 = getelementptr inbounds i8, ptr %575, i64 %578
  store i8 %574, ptr %579, align 1, !tbaa !31
  %580 = load i8, ptr %31, align 1, !tbaa !31
  %581 = load ptr, ptr %36, align 8, !tbaa !5
  %582 = load i32, ptr %37, align 4, !tbaa !9
  %583 = mul i32 %582, 4
  %584 = add i32 %583, 1
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds i8, ptr %581, i64 %585
  store i8 %580, ptr %586, align 1, !tbaa !31
  %587 = load i8, ptr %32, align 1, !tbaa !31
  %588 = load ptr, ptr %36, align 8, !tbaa !5
  %589 = load i32, ptr %37, align 4, !tbaa !9
  %590 = mul i32 %589, 4
  %591 = add i32 %590, 2
  %592 = zext i32 %591 to i64
  %593 = getelementptr inbounds i8, ptr %588, i64 %592
  store i8 %587, ptr %593, align 1, !tbaa !31
  %594 = load i8, ptr %33, align 1, !tbaa !31
  %595 = load ptr, ptr %36, align 8, !tbaa !5
  %596 = load i32, ptr %37, align 4, !tbaa !9
  %597 = mul i32 %596, 4
  %598 = add i32 %597, 3
  %599 = zext i32 %598 to i64
  %600 = getelementptr inbounds i8, ptr %595, i64 %599
  store i8 %594, ptr %600, align 1, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  br label %601

601:                                              ; preds = %567, %555
  %602 = load ptr, ptr %6, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.LodePNGColorStats, ptr %602, i32 0, i32 6
  %604 = load i32, ptr %603, align 4, !tbaa !33
  %605 = add i32 %604, 1
  store i32 %605, ptr %603, align 4, !tbaa !33
  %606 = load ptr, ptr %6, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.LodePNGColorStats, ptr %606, i32 0, i32 6
  %608 = load i32, ptr %607, align 4, !tbaa !33
  %609 = load i32, ptr %20, align 4, !tbaa !9
  %610 = icmp uge i32 %608, %609
  %611 = zext i1 %610 to i32
  store i32 %611, ptr %16, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %601, %548
  br label %613

613:                                              ; preds = %612, %545
  %614 = load i32, ptr %15, align 4, !tbaa !9
  %615 = icmp ne i32 %614, 0
  br i1 %615, label %616, label %626

616:                                              ; preds = %613
  %617 = load i32, ptr %16, align 4, !tbaa !9
  %618 = icmp ne i32 %617, 0
  br i1 %618, label %619, label %626

619:                                              ; preds = %616
  %620 = load i32, ptr %14, align 4, !tbaa !9
  %621 = icmp ne i32 %620, 0
  br i1 %621, label %622, label %626

622:                                              ; preds = %619
  %623 = load i32, ptr %18, align 4, !tbaa !9
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %626

625:                                              ; preds = %622
  br label %630

626:                                              ; preds = %622, %619, %616, %613
  br label %627

627:                                              ; preds = %626, %373
  %628 = load i64, ptr %11, align 8, !tbaa !11
  %629 = add i64 %628, 1
  store i64 %629, ptr %11, align 8, !tbaa !11
  br label %344, !llvm.loop !34

630:                                              ; preds = %625, %344
  %631 = load ptr, ptr %6, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.LodePNGColorStats, ptr %631, i32 0, i32 1
  %633 = load i32, ptr %632, align 4, !tbaa !27
  %634 = icmp ne i32 %633, 0
  br i1 %634, label %635, label %694

635:                                              ; preds = %630
  %636 = load ptr, ptr %6, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.LodePNGColorStats, ptr %636, i32 0, i32 5
  %638 = load i32, ptr %637, align 8, !tbaa !28
  %639 = icmp ne i32 %638, 0
  br i1 %639, label %694, label %640

640:                                              ; preds = %635
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %641

641:                                              ; preds = %690, %640
  %642 = load i64, ptr %11, align 8, !tbaa !11
  %643 = load i64, ptr %13, align 8, !tbaa !11
  %644 = icmp ne i64 %642, %643
  br i1 %644, label %645, label %693

645:                                              ; preds = %641
  %646 = load ptr, ptr %7, align 8, !tbaa !5
  %647 = load i64, ptr %11, align 8, !tbaa !11
  %648 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %646, i64 noundef %647, ptr noundef %648)
  %649 = load i8, ptr %33, align 1, !tbaa !31
  %650 = zext i8 %649 to i32
  %651 = icmp ne i32 %650, 0
  br i1 %651, label %652, label %689

652:                                              ; preds = %645
  %653 = load i8, ptr %30, align 1, !tbaa !31
  %654 = zext i8 %653 to i32
  %655 = load ptr, ptr %6, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.LodePNGColorStats, ptr %655, i32 0, i32 2
  %657 = load i16, ptr %656, align 8, !tbaa !24
  %658 = zext i16 %657 to i32
  %659 = icmp eq i32 %654, %658
  br i1 %659, label %660, label %689

660:                                              ; preds = %652
  %661 = load i8, ptr %31, align 1, !tbaa !31
  %662 = zext i8 %661 to i32
  %663 = load ptr, ptr %6, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.LodePNGColorStats, ptr %663, i32 0, i32 3
  %665 = load i16, ptr %664, align 2, !tbaa !25
  %666 = zext i16 %665 to i32
  %667 = icmp eq i32 %662, %666
  br i1 %667, label %668, label %689

668:                                              ; preds = %660
  %669 = load i8, ptr %32, align 1, !tbaa !31
  %670 = zext i8 %669 to i32
  %671 = load ptr, ptr %6, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.LodePNGColorStats, ptr %671, i32 0, i32 4
  %673 = load i16, ptr %672, align 4, !tbaa !26
  %674 = zext i16 %673 to i32
  %675 = icmp eq i32 %670, %674
  br i1 %675, label %676, label %689

676:                                              ; preds = %668
  %677 = load ptr, ptr %6, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.LodePNGColorStats, ptr %677, i32 0, i32 5
  store i32 1, ptr %678, align 8, !tbaa !28
  %679 = load ptr, ptr %6, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.LodePNGColorStats, ptr %679, i32 0, i32 1
  store i32 0, ptr %680, align 4, !tbaa !27
  %681 = load ptr, ptr %6, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.LodePNGColorStats, ptr %681, i32 0, i32 8
  %683 = load i32, ptr %682, align 8, !tbaa !20
  %684 = icmp ult i32 %683, 8
  br i1 %684, label %685, label %688

685:                                              ; preds = %676
  %686 = load ptr, ptr %6, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.LodePNGColorStats, ptr %686, i32 0, i32 8
  store i32 8, ptr %687, align 8, !tbaa !20
  br label %688

688:                                              ; preds = %685, %676
  br label %689

689:                                              ; preds = %688, %668, %660, %652, %645
  br label %690

690:                                              ; preds = %689
  %691 = load i64, ptr %11, align 8, !tbaa !11
  %692 = add i64 %691, 1
  store i64 %692, ptr %11, align 8, !tbaa !11
  br label %641, !llvm.loop !35

693:                                              ; preds = %641
  br label %694

694:                                              ; preds = %693, %635, %630
  %695 = load ptr, ptr %6, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.LodePNGColorStats, ptr %695, i32 0, i32 2
  %697 = load i16, ptr %696, align 8, !tbaa !24
  %698 = zext i16 %697 to i32
  %699 = shl i32 %698, 8
  %700 = load ptr, ptr %6, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.LodePNGColorStats, ptr %700, i32 0, i32 2
  %702 = load i16, ptr %701, align 8, !tbaa !24
  %703 = zext i16 %702 to i32
  %704 = add nsw i32 %703, %699
  %705 = trunc i32 %704 to i16
  store i16 %705, ptr %701, align 8, !tbaa !24
  %706 = load ptr, ptr %6, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.LodePNGColorStats, ptr %706, i32 0, i32 3
  %708 = load i16, ptr %707, align 2, !tbaa !25
  %709 = zext i16 %708 to i32
  %710 = shl i32 %709, 8
  %711 = load ptr, ptr %6, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.LodePNGColorStats, ptr %711, i32 0, i32 3
  %713 = load i16, ptr %712, align 2, !tbaa !25
  %714 = zext i16 %713 to i32
  %715 = add nsw i32 %714, %710
  %716 = trunc i32 %715 to i16
  store i16 %716, ptr %712, align 2, !tbaa !25
  %717 = load ptr, ptr %6, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.LodePNGColorStats, ptr %717, i32 0, i32 4
  %719 = load i16, ptr %718, align 4, !tbaa !26
  %720 = zext i16 %719 to i32
  %721 = shl i32 %720, 8
  %722 = load ptr, ptr %6, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.LodePNGColorStats, ptr %722, i32 0, i32 4
  %724 = load i16, ptr %723, align 4, !tbaa !26
  %725 = zext i16 %724 to i32
  %726 = add nsw i32 %725, %721
  %727 = trunc i32 %726 to i16
  store i16 %727, ptr %723, align 4, !tbaa !26
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef %12)
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #4
  br label %728

728:                                              ; preds = %694, %342
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #4
  store i8 0, ptr %38, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #4
  store i8 0, ptr %39, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #4
  store i8 0, ptr %40, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #4
  store i8 0, ptr %41, align 1, !tbaa !31
  %729 = load ptr, ptr %7, align 8, !tbaa !5
  %730 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %38, ptr noundef %39, ptr noundef %40, ptr noundef %41, ptr noundef %729, i64 noundef 0, ptr noundef %730)
  %731 = load ptr, ptr %6, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.LodePNGColorStats, ptr %731, i32 0, i32 6
  %733 = load i32, ptr %732, align 4, !tbaa !33
  %734 = icmp eq i32 %733, 1
  br i1 %734, label %735, label %773

735:                                              ; preds = %728
  %736 = load ptr, ptr %6, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.LodePNGColorStats, ptr %736, i32 0, i32 0
  %738 = load i32, ptr %737, align 8, !tbaa !23
  %739 = icmp eq i32 %738, 0
  br i1 %739, label %740, label %773

740:                                              ; preds = %735
  %741 = load i8, ptr %38, align 1, !tbaa !31
  %742 = zext i8 %741 to i32
  %743 = icmp eq i32 %742, 255
  br i1 %743, label %744, label %773

744:                                              ; preds = %740
  %745 = load i32, ptr %8, align 4, !tbaa !9
  %746 = icmp ugt i32 %745, 20
  br i1 %746, label %747, label %773

747:                                              ; preds = %744
  %748 = load i32, ptr %9, align 4, !tbaa !9
  %749 = icmp ugt i32 %748, 20
  br i1 %749, label %750, label %773

750:                                              ; preds = %747
  %751 = load i32, ptr %8, align 4, !tbaa !9
  %752 = icmp ugt i32 %751, 225
  br i1 %752, label %753, label %756

753:                                              ; preds = %750
  %754 = load i32, ptr %9, align 4, !tbaa !9
  %755 = icmp ugt i32 %754, 225
  br i1 %755, label %771, label %756

756:                                              ; preds = %753, %750
  %757 = load i32, ptr %8, align 4, !tbaa !9
  %758 = load i32, ptr %9, align 4, !tbaa !9
  %759 = mul i32 %757, %758
  %760 = icmp ugt i32 %759, 75000
  br i1 %760, label %771, label %761

761:                                              ; preds = %756
  %762 = load i32, ptr %8, align 4, !tbaa !9
  %763 = icmp ugt i32 %762, 250
  br i1 %763, label %764, label %769

764:                                              ; preds = %761
  %765 = load i32, ptr %8, align 4, !tbaa !9
  %766 = load i32, ptr %9, align 4, !tbaa !9
  %767 = mul i32 %765, %766
  %768 = icmp ugt i32 %767, 40000
  br label %769

769:                                              ; preds = %764, %761
  %770 = phi i1 [ false, %761 ], [ %768, %764 ]
  br label %771

771:                                              ; preds = %769, %756, %753
  %772 = phi i1 [ true, %756 ], [ true, %753 ], [ %770, %769 ]
  br label %773

773:                                              ; preds = %771, %747, %744, %740, %735, %728
  %774 = phi i1 [ false, %747 ], [ false, %744 ], [ false, %740 ], [ false, %735 ], [ false, %728 ], [ %772, %771 ]
  %775 = zext i1 %774 to i32
  %776 = load ptr, ptr %6, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.LodePNGColorStats, ptr %776, i32 0, i32 10
  store i32 %775, ptr %777, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 136, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  ret i32 0
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL15lodepng_get_bppPK16LodePNGColorMode(ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #3

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

; 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) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { nounwind willreturn memory(read) }

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


; 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 nounwind uwtable
declare dso_local noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef) local_unnamed_addr #1

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

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

; 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 #1

; 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 #1

; 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 #2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z27lodepng_compute_color_statsP17LodePNGColorStatsPKhjjPK16LodePNGColorMode(ptr nocapture noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) local_unnamed_addr #2 {
  %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
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 136, ptr nonnull %6) #4
  %23 = zext i32 %2 to i64
  %24 = zext i32 %3 to i64
  %25 = mul nuw i64 %24, %23
  %26 = tail call noundef i32 @_Z25lodepng_is_greyscale_typePK16LodePNGColorMode(ptr noundef %4)
  %.not = icmp ne i32 %26, 0
  %27 = zext i1 %.not to i32
  %28 = tail call noundef i32 @_Z22lodepng_can_have_alphaPK16LodePNGColorMode(ptr noundef %4)
  %.not225 = icmp eq i32 %28, 0
  %29 = zext i1 %.not225 to i32
  %30 = tail call noundef i32 @_ZL15lodepng_get_bppPK16LodePNGColorMode(ptr noundef %4)
  %31 = icmp eq i32 %30, 1
  %32 = zext i1 %31 to i32
  %33 = icmp ugt i32 %30, 8
  %brmerge = or i1 %33, %31
  %.mux = select i1 %33, i32 257, i32 2
  br i1 %brmerge, label %39, label %34

34:                                               ; preds = %5
  %35 = icmp eq i32 %30, 2
  br i1 %35, label %39, label %36

36:                                               ; preds = %34
  %37 = icmp eq i32 %30, 4
  %38 = select i1 %37, i32 16, i32 256
  br label %39

39:                                               ; preds = %5, %34, %36
  %.0212 = phi i32 [ %.mux, %5 ], [ %38, %36 ], [ 4, %34 ]
  %40 = getelementptr inbounds i8, ptr %0, i64 1056
  %41 = load i64, ptr %40, align 8, !tbaa !5
  %42 = add i64 %41, %25
  store i64 %42, ptr %40, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %4, i64 4
  %44 = load i32, ptr %43, align 4, !tbaa !12
  %45 = icmp eq i32 %44, 16
  br i1 %45, label %46, label %.thread

46:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #4
  store i16 0, ptr %7, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %8) #4
  store i16 0, ptr %8, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %9) #4
  store i16 0, ptr %9, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %10) #4
  store i16 0, ptr %10, align 2, !tbaa !16
  %.not226292 = icmp eq i64 %25, 0
  br i1 %.not226292, label %.thread270, label %.lr.ph

47:                                               ; preds = %63
  %48 = add nuw i64 %.0293, 1
  %.not226 = icmp eq i64 %48, %25
  br i1 %.not226, label %.thread270, label %.lr.ph, !llvm.loop !17

.thread270:                                       ; preds = %47, %46
  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.ph:                                           ; preds = %46, %47
  %.0293 = phi i64 [ %48, %47 ], [ 0, %46 ]
  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 %.0293, ptr noundef %4)
  %49 = load i16, ptr %7, align 2, !tbaa !16
  %50 = zext i16 %49 to i32
  %51 = and i32 %50, 255
  %52 = lshr i32 %50, 8
  %.not227 = icmp eq i32 %51, %52
  br i1 %.not227, label %53, label %68

53:                                               ; preds = %.lr.ph
  %54 = load i16, ptr %8, align 2, !tbaa !16
  %55 = zext i16 %54 to i32
  %56 = and i32 %55, 255
  %57 = lshr i32 %55, 8
  %.not228 = icmp eq i32 %56, %57
  br i1 %.not228, label %58, label %68

58:                                               ; preds = %53
  %59 = load i16, ptr %9, align 2, !tbaa !16
  %60 = zext i16 %59 to i32
  %61 = and i32 %60, 255
  %62 = lshr i32 %60, 8
  %.not229 = icmp eq i32 %61, %62
  br i1 %.not229, label %63, label %68

63:                                               ; preds = %58
  %64 = load i16, ptr %10, align 2, !tbaa !16
  %65 = zext i16 %64 to i32
  %66 = and i32 %65, 255
  %67 = lshr i32 %65, 8
  %.not230 = icmp eq i32 %66, %67
  br i1 %.not230, label %47, label %68

68:                                               ; preds = %63, %58, %53, %.lr.ph
  %69 = getelementptr inbounds i8, ptr %0, i64 1048
  store i32 16, ptr %69, align 8, !tbaa !19
  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 !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %12) #4
  store i16 0, ptr %12, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #4
  store i16 0, ptr %13, align 2, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %14) #4
  store i16 0, ptr %14, align 2, !tbaa !16
  %70 = getelementptr inbounds i8, ptr %0, i64 8
  %71 = getelementptr inbounds i8, ptr %0, i64 10
  %72 = getelementptr inbounds i8, ptr %0, i64 12
  %73 = getelementptr inbounds i8, ptr %0, i64 4
  %74 = getelementptr inbounds i8, ptr %0, i64 16
  br label %75

75:                                               ; preds = %68, %.thread277
  %.1296 = phi i64 [ 0, %68 ], [ %111, %.thread277 ]
  %.0193295 = phi i32 [ %27, %68 ], [ %.1194, %.thread277 ]
  %.0198294 = phi i32 [ %29, %68 ], [ %.2200281, %.thread277 ]
  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 %.1296, ptr noundef %4)
  %.not250 = icmp eq i32 %.0193295, 0
  br i1 %.not250, label %76, label %81

76:                                               ; preds = %75
  %77 = load i16, ptr %11, align 2, !tbaa !16
  %78 = load i16, ptr %12, align 2, !tbaa !16
  %.not251 = icmp eq i16 %77, %78
  %79 = load i16, ptr %13, align 2
  %.not252 = icmp eq i16 %77, %79
  %or.cond262 = select i1 %.not251, i1 %.not252, i1 false
  br i1 %or.cond262, label %81, label %80

80:                                               ; preds = %76
  store i32 1, ptr %0, align 8, !tbaa !20
  br label %81

81:                                               ; preds = %76, %80, %75
  %82 = phi i1 [ true, %75 ], [ true, %80 ], [ false, %76 ]
  %.1194 = phi i32 [ 1, %75 ], [ 1, %80 ], [ 0, %76 ]
  %.not253 = icmp eq i32 %.0198294, 0
  br i1 %.not253, label %83, label %110

83:                                               ; preds = %81
  %84 = load i16, ptr %11, align 2, !tbaa !16
  %85 = load i16, ptr %70, align 8, !tbaa !21
  %86 = icmp eq i16 %84, %85
  br i1 %86, label %87, label %95

87:                                               ; preds = %83
  %88 = load i16, ptr %12, align 2, !tbaa !16
  %89 = load i16, ptr %71, align 2, !tbaa !22
  %90 = icmp eq i16 %88, %89
  br i1 %90, label %91, label %95

91:                                               ; preds = %87
  %92 = load i16, ptr %13, align 2, !tbaa !16
  %93 = load i16, ptr %72, align 4, !tbaa !23
  %94 = icmp eq i16 %92, %93
  br label %95

95:                                               ; preds = %91, %87, %83
  %96 = phi i1 [ false, %87 ], [ false, %83 ], [ %94, %91 ]
  %97 = load i16, ptr %14, align 2, !tbaa !16
  switch i16 %97, label %.sink.split [
    i16 -1, label %107
    i16 0, label %98
  ]

98:                                               ; preds = %95
  %99 = load i32, ptr %73, align 4, !tbaa !24
  %100 = icmp eq i32 %99, 0
  %or.cond = select i1 %100, i1 true, i1 %96
  br i1 %or.cond, label %101, label %.sink.split

101:                                              ; preds = %98
  %102 = load i32, ptr %74, align 8, !tbaa !25
  %103 = or i32 %102, %99
  %brmerge311.not = icmp eq i32 %103, 0
  br i1 %brmerge311.not, label %104, label %.thread277

104:                                              ; preds = %101
  store i32 1, ptr %73, align 4, !tbaa !24
  store i16 %84, ptr %70, align 8, !tbaa !21
  %105 = load i16, ptr %12, align 2, !tbaa !16
  store i16 %105, ptr %71, align 2, !tbaa !22
  %106 = load i16, ptr %13, align 2, !tbaa !16
  store i16 %106, ptr %72, align 4, !tbaa !23
  br label %.thread277

107:                                              ; preds = %95
  %108 = load i32, ptr %73, align 4, !tbaa !24
  %109 = icmp ne i32 %108, 0
  %or.cond3 = select i1 %109, i1 %96, i1 false
  br i1 %or.cond3, label %.sink.split, label %.thread277

.sink.split:                                      ; preds = %107, %98, %95
  store i32 1, ptr %74, align 8, !tbaa !25
  store i32 0, ptr %73, align 4, !tbaa !24
  br label %110

110:                                              ; preds = %.sink.split, %81
  br i1 %82, label %112, label %.thread277

.thread277:                                       ; preds = %101, %104, %107, %110
  %.2200281 = phi i32 [ 1, %110 ], [ 0, %107 ], [ 0, %104 ], [ 0, %101 ]
  %111 = add i64 %.1296, 1
  %.not249 = icmp eq i64 %111, %25
  br i1 %.not249, label %112, label %75, !llvm.loop !26

112:                                              ; preds = %110, %.thread277
  %113 = load i32, ptr %73, align 4, !tbaa !24
  %.not258 = icmp eq i32 %113, 0
  br i1 %.not258, label %.loopexit291, label %114

114:                                              ; preds = %112
  %115 = load i32, ptr %74, align 8, !tbaa !25
  %.not259 = icmp eq i32 %115, 0
  br i1 %.not259, label %.preheader290, label %.loopexit291

.preheader290:                                    ; preds = %114, %130
  %.2297 = phi i64 [ %131, %130 ], [ 0, %114 ]
  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 %.2297, ptr noundef %4)
  %116 = load i16, ptr %14, align 2, !tbaa !16
  %.not261 = icmp eq i16 %116, 0
  br i1 %.not261, label %130, label %117

117:                                              ; preds = %.preheader290
  %118 = load i16, ptr %11, align 2, !tbaa !16
  %119 = load i16, ptr %70, align 8, !tbaa !21
  %120 = icmp eq i16 %118, %119
  br i1 %120, label %121, label %130

121:                                              ; preds = %117
  %122 = load i16, ptr %12, align 2, !tbaa !16
  %123 = load i16, ptr %71, align 2, !tbaa !22
  %124 = icmp eq i16 %122, %123
  br i1 %124, label %125, label %130

125:                                              ; preds = %121
  %126 = load i16, ptr %13, align 2, !tbaa !16
  %127 = load i16, ptr %72, align 4, !tbaa !23
  %128 = icmp eq i16 %126, %127
  br i1 %128, label %129, label %130

129:                                              ; preds = %125
  store i32 1, ptr %74, align 8, !tbaa !25
  store i32 0, ptr %73, align 4, !tbaa !24
  br label %130

130:                                              ; preds = %.preheader290, %117, %121, %125, %129
  %131 = add i64 %.2297, 1
  %.not260 = icmp eq i64 %131, %25
  br i1 %.not260, label %.loopexit291, label %.preheader290, !llvm.loop !27

.loopexit291:                                     ; preds = %130, %114, %112
  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 %289

.thread:                                          ; preds = %39, %.thread270
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef nonnull %6)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #4
  store i8 0, ptr %15, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #4
  store i8 0, ptr %16, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #4
  store i8 0, ptr %17, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #4
  store i8 0, ptr %18, align 1, !tbaa !28
  %.not232298 = icmp eq i64 %25, 0
  br i1 %.not232298, label %._crit_edge, label %.lr.ph304

.lr.ph304:                                        ; preds = %.thread
  %132 = getelementptr inbounds i8, ptr %0, i64 1048
  %133 = getelementptr inbounds i8, ptr %0, i64 8
  %134 = getelementptr inbounds i8, ptr %0, i64 10
  %135 = getelementptr inbounds i8, ptr %0, i64 12
  %136 = getelementptr inbounds i8, ptr %0, i64 4
  %137 = getelementptr inbounds i8, ptr %0, i64 16
  %138 = getelementptr inbounds i8, ptr %0, i64 20
  %139 = getelementptr inbounds i8, ptr %0, i64 24
  br label %140

140:                                              ; preds = %.lr.ph304, %.thread285
  %.3303 = phi i64 [ 0, %.lr.ph304 ], [ %250, %.thread285 ]
  %.2195302 = phi i32 [ %27, %.lr.ph304 ], [ %.4197, %.thread285 ]
  %.3201301 = phi i32 [ %29, %.lr.ph304 ], [ %.6, %.thread285 ]
  %.2205300 = phi i32 [ 0, %.lr.ph304 ], [ %.4207, %.thread285 ]
  %.2210299 = phi i32 [ %32, %.lr.ph304 ], [ %.3211, %.thread285 ]
  %.not233 = icmp eq i64 %.3303, 0
  br i1 %.not233, label %152, label %141

141:                                              ; preds = %140
  %142 = load i32, ptr %4, align 8, !tbaa !29
  %143 = icmp eq i32 %142, 6
  br i1 %143, label %144, label %152

144:                                              ; preds = %141
  %145 = load i32, ptr %43, align 4, !tbaa !12
  %146 = icmp eq i32 %145, 8
  br i1 %146, label %147, label %152

147:                                              ; preds = %144
  %148 = shl i64 %.3303, 2
  %149 = getelementptr inbounds i8, ptr %1, i64 %148
  %150 = getelementptr inbounds i8, ptr %149, i64 -4
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %149, ptr noundef nonnull dereferenceable(4) %150, i64 4)
  %151 = icmp eq i32 %bcmp, 0
  br i1 %151, label %.thread285, label %152

152:                                              ; preds = %147, %144, %141, %140
  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 %.3303, ptr noundef %4)
  %.not234 = icmp eq i32 %.2210299, 0
  %.pre = load i32, ptr %132, align 8, !tbaa !19
  %153 = icmp ult i32 %.pre, 8
  %or.cond312 = select i1 %.not234, i1 %153, i1 false
  br i1 %or.cond312, label %154, label %160

154:                                              ; preds = %152
  %155 = load i8, ptr %15, align 1, !tbaa !28
  %156 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %155)
  %157 = load i32, ptr %132, align 8, !tbaa !19
  %158 = icmp ugt i32 %156, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %154
  store i32 %156, ptr %132, align 8, !tbaa !19
  br label %160

160:                                              ; preds = %154, %159, %152
  %161 = phi i32 [ %157, %154 ], [ %156, %159 ], [ %.pre, %152 ]
  %162 = icmp uge i32 %161, %30
  %163 = zext i1 %162 to i32
  %.not235 = icmp eq i32 %.2195302, 0
  br i1 %.not235, label %164, label %171

164:                                              ; preds = %160
  %165 = load i8, ptr %15, align 1, !tbaa !28
  %166 = load i8, ptr %16, align 1, !tbaa !28
  %.not236 = icmp eq i8 %165, %166
  %167 = load i8, ptr %17, align 1
  %.not237 = icmp eq i8 %165, %167
  %or.cond263 = select i1 %.not236, i1 %.not237, i1 false
  br i1 %or.cond263, label %171, label %168

168:                                              ; preds = %164
  store i32 1, ptr %0, align 8, !tbaa !20
  %169 = icmp ult i32 %161, 8
  br i1 %169, label %170, label %171

170:                                              ; preds = %168
  store i32 8, ptr %132, align 8, !tbaa !19
  br label %171

171:                                              ; preds = %164, %168, %170, %160
  %172 = phi i32 [ %161, %160 ], [ 8, %170 ], [ %161, %168 ], [ %161, %164 ]
  %173 = phi i1 [ true, %160 ], [ true, %170 ], [ true, %168 ], [ false, %164 ]
  %.3196 = phi i32 [ 1, %160 ], [ 1, %170 ], [ 1, %168 ], [ 0, %164 ]
  %.not238 = icmp eq i32 %.3201301, 0
  br i1 %.not238, label %174, label %.thread284

174:                                              ; preds = %171
  %175 = load i8, ptr %15, align 1, !tbaa !28
  %176 = load i16, ptr %133, align 8, !tbaa !21
  %177 = zext i8 %175 to i16
  %178 = icmp eq i16 %176, %177
  br i1 %178, label %179, label %189

179:                                              ; preds = %174
  %180 = load i8, ptr %16, align 1, !tbaa !28
  %181 = load i16, ptr %134, align 2, !tbaa !22
  %182 = zext i8 %180 to i16
  %183 = icmp eq i16 %181, %182
  br i1 %183, label %184, label %189

184:                                              ; preds = %179
  %185 = load i8, ptr %17, align 1, !tbaa !28
  %186 = load i16, ptr %135, align 4, !tbaa !23
  %187 = zext i8 %185 to i16
  %188 = icmp eq i16 %186, %187
  br label %189

189:                                              ; preds = %184, %179, %174
  %190 = phi i1 [ false, %179 ], [ false, %174 ], [ %188, %184 ]
  %191 = load i8, ptr %18, align 1, !tbaa !28
  switch i8 %191, label %195 [
    i8 -1, label %206
    i8 0, label %192
  ]

192:                                              ; preds = %189
  %193 = load i32, ptr %136, align 4, !tbaa !24
  %194 = icmp eq i32 %193, 0
  %or.cond11 = select i1 %194, i1 true, i1 %190
  br i1 %or.cond11, label %198, label %195

195:                                              ; preds = %189, %192
  store i32 1, ptr %137, align 8, !tbaa !25
  store i32 0, ptr %136, align 4, !tbaa !24
  %196 = icmp ult i32 %172, 8
  br i1 %196, label %197, label %.thread284

197:                                              ; preds = %195
  store i32 8, ptr %132, align 8, !tbaa !19
  br label %.thread284

198:                                              ; preds = %192
  %199 = load i32, ptr %137, align 8, !tbaa !25
  %200 = or i32 %199, %193
  %brmerge314.not = icmp eq i32 %200, 0
  br i1 %brmerge314.not, label %201, label %.thread284

201:                                              ; preds = %198
  store i32 1, ptr %136, align 4, !tbaa !24
  store i16 %177, ptr %133, align 8, !tbaa !21
  %202 = load i8, ptr %16, align 1, !tbaa !28
  %203 = zext i8 %202 to i16
  store i16 %203, ptr %134, align 2, !tbaa !22
  %204 = load i8, ptr %17, align 1, !tbaa !28
  %205 = zext i8 %204 to i16
  store i16 %205, ptr %135, align 4, !tbaa !23
  br label %.thread284

206:                                              ; preds = %189
  %207 = load i32, ptr %136, align 4, !tbaa !24
  %208 = icmp ne i32 %207, 0
  %or.cond13 = select i1 %208, i1 %190, i1 false
  br i1 %or.cond13, label %209, label %.thread284

209:                                              ; preds = %206
  store i32 1, ptr %137, align 8, !tbaa !25
  store i32 0, ptr %136, align 4, !tbaa !24
  %210 = icmp ult i32 %172, 8
  br i1 %210, label %211, label %.thread284

211:                                              ; preds = %209
  store i32 8, ptr %132, align 8, !tbaa !19
  br label %.thread284

.thread284:                                       ; preds = %198, %197, %195, %206, %211, %209, %201, %171
  %212 = phi i1 [ true, %171 ], [ true, %197 ], [ true, %195 ], [ true, %211 ], [ true, %209 ], [ false, %206 ], [ false, %201 ], [ false, %198 ]
  %.5 = phi i32 [ 1, %171 ], [ 1, %197 ], [ 1, %195 ], [ 1, %211 ], [ 1, %209 ], [ 0, %206 ], [ 0, %201 ], [ 0, %198 ]
  %.not243 = icmp eq i32 %.2205300, 0
  br i1 %.not243, label %213, label %248

213:                                              ; preds = %.thread284
  %214 = load i8, ptr %15, align 1, !tbaa !28
  %215 = load i8, ptr %16, align 1, !tbaa !28
  %216 = load i8, ptr %17, align 1, !tbaa !28
  %217 = load i8, ptr %18, align 1, !tbaa !28
  %218 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef nonnull %6, i8 noundef zeroext %214, i8 noundef zeroext %215, i8 noundef zeroext %216, i8 noundef zeroext %217)
  %.not244 = icmp eq i32 %218, 0
  br i1 %.not244, label %219, label %.thread285

219:                                              ; preds = %213
  %220 = load i8, ptr %15, align 1, !tbaa !28
  %221 = load i8, ptr %16, align 1, !tbaa !28
  %222 = load i8, ptr %17, align 1, !tbaa !28
  %223 = load i8, ptr %18, align 1, !tbaa !28
  %224 = load i32, ptr %138, align 4, !tbaa !30
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %220, i8 noundef zeroext %221, i8 noundef zeroext %222, i8 noundef zeroext %223, i32 noundef %224)
  %225 = load i32, ptr %138, align 4, !tbaa !30
  %226 = icmp ult i32 %225, 256
  br i1 %226, label %227, label %244

227:                                              ; preds = %219
  %228 = load i8, ptr %15, align 1, !tbaa !28
  %229 = shl nuw nsw i32 %225, 2
  %230 = zext nneg i32 %229 to i64
  %231 = getelementptr inbounds i8, ptr %139, i64 %230
  store i8 %228, ptr %231, align 1, !tbaa !28
  %232 = load i8, ptr %16, align 1, !tbaa !28
  %233 = or disjoint i32 %229, 1
  %234 = zext nneg i32 %233 to i64
  %235 = getelementptr inbounds i8, ptr %139, i64 %234
  store i8 %232, ptr %235, align 1, !tbaa !28
  %236 = load i8, ptr %17, align 1, !tbaa !28
  %237 = or disjoint i32 %229, 2
  %238 = zext nneg i32 %237 to i64
  %239 = getelementptr inbounds i8, ptr %139, i64 %238
  store i8 %236, ptr %239, align 1, !tbaa !28
  %240 = load i8, ptr %18, align 1, !tbaa !28
  %241 = or disjoint i32 %229, 3
  %242 = zext nneg i32 %241 to i64
  %243 = getelementptr inbounds i8, ptr %139, i64 %242
  store i8 %240, ptr %243, align 1, !tbaa !28
  br label %244

244:                                              ; preds = %227, %219
  %245 = add i32 %225, 1
  store i32 %245, ptr %138, align 4, !tbaa !30
  %246 = icmp uge i32 %245, %.0212
  %247 = zext i1 %246 to i32
  br label %248

248:                                              ; preds = %244, %.thread284
  %.3206 = phi i32 [ 1, %.thread284 ], [ %247, %244 ]
  %249 = icmp ne i32 %.3206, 0
  %or.cond15 = and i1 %212, %249
  %or.cond17 = and i1 %173, %or.cond15
  %or.cond19 = select i1 %or.cond17, i1 %162, i1 false
  br i1 %or.cond19, label %._crit_edge, label %.thread285

.thread285:                                       ; preds = %213, %248, %147
  %.3211 = phi i32 [ %.2210299, %147 ], [ %163, %248 ], [ %163, %213 ]
  %.4207 = phi i32 [ %.2205300, %147 ], [ %.3206, %248 ], [ 0, %213 ]
  %.6 = phi i32 [ %.3201301, %147 ], [ %.5, %248 ], [ %.5, %213 ]
  %.4197 = phi i32 [ %.2195302, %147 ], [ %.3196, %248 ], [ %.3196, %213 ]
  %250 = add nuw i64 %.3303, 1
  %.not232 = icmp eq i64 %250, %25
  br i1 %.not232, label %._crit_edge, label %140, !llvm.loop !31

._crit_edge:                                      ; preds = %.thread285, %248, %.thread
  %251 = getelementptr inbounds i8, ptr %0, i64 4
  %252 = load i32, ptr %251, align 4, !tbaa !24
  %.not245 = icmp eq i32 %252, 0
  br i1 %.not245, label %.loopexit, label %253

253:                                              ; preds = %._crit_edge
  %254 = getelementptr inbounds i8, ptr %0, i64 16
  %255 = load i32, ptr %254, align 8, !tbaa !25
  %.not246 = icmp ne i32 %255, 0
  %or.cond309 = or i1 %.not246, %.not232298
  br i1 %or.cond309, label %.loopexit, label %.lr.ph308

.lr.ph308:                                        ; preds = %253
  %256 = getelementptr inbounds i8, ptr %0, i64 8
  %257 = getelementptr inbounds i8, ptr %0, i64 10
  %258 = getelementptr inbounds i8, ptr %0, i64 12
  %259 = getelementptr inbounds i8, ptr %0, i64 1048
  br label %260

260:                                              ; preds = %.lr.ph308, %281
  %.4307 = phi i64 [ 0, %.lr.ph308 ], [ %282, %281 ]
  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 %.4307, ptr noundef %4)
  %261 = load i8, ptr %18, align 1, !tbaa !28
  %.not248 = icmp eq i8 %261, 0
  br i1 %.not248, label %281, label %262

262:                                              ; preds = %260
  %263 = load i8, ptr %15, align 1, !tbaa !28
  %264 = load i16, ptr %256, align 8, !tbaa !21
  %265 = zext i8 %263 to i16
  %266 = icmp eq i16 %264, %265
  br i1 %266, label %267, label %281

267:                                              ; preds = %262
  %268 = load i8, ptr %16, align 1, !tbaa !28
  %269 = load i16, ptr %257, align 2, !tbaa !22
  %270 = zext i8 %268 to i16
  %271 = icmp eq i16 %269, %270
  br i1 %271, label %272, label %281

272:                                              ; preds = %267
  %273 = load i8, ptr %17, align 1, !tbaa !28
  %274 = load i16, ptr %258, align 4, !tbaa !23
  %275 = zext i8 %273 to i16
  %276 = icmp eq i16 %274, %275
  br i1 %276, label %277, label %281

277:                                              ; preds = %272
  store i32 1, ptr %254, align 8, !tbaa !25
  store i32 0, ptr %251, align 4, !tbaa !24
  %278 = load i32, ptr %259, align 8, !tbaa !19
  %279 = icmp ult i32 %278, 8
  br i1 %279, label %280, label %281

280:                                              ; preds = %277
  store i32 8, ptr %259, align 8, !tbaa !19
  br label %281

281:                                              ; preds = %260, %262, %267, %272, %280, %277
  %282 = add nuw i64 %.4307, 1
  %.not247 = icmp eq i64 %282, %25
  br i1 %.not247, label %.loopexit, label %260, !llvm.loop !32

.loopexit:                                        ; preds = %281, %253, %._crit_edge
  %283 = getelementptr inbounds i8, ptr %0, i64 8
  %284 = load <2 x i16>, ptr %283, align 8, !tbaa !16
  %285 = mul <2 x i16> %284, <i16 257, i16 257>
  store <2 x i16> %285, ptr %283, align 8, !tbaa !16
  %286 = getelementptr inbounds i8, ptr %0, i64 12
  %287 = load i16, ptr %286, align 4, !tbaa !23
  %288 = mul i16 %287, 257
  store i16 %288, ptr %286, align 4, !tbaa !23
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef nonnull %6)
  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 %289

289:                                              ; preds = %.loopexit, %.loopexit291
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #4
  store i8 0, ptr %19, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #4
  store i8 0, ptr %20, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #4
  store i8 0, ptr %21, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #4
  store i8 0, ptr %22, align 1, !tbaa !28
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %22, ptr noundef %1, i64 noundef 0, ptr noundef %4)
  %290 = getelementptr inbounds i8, ptr %0, i64 20
  %291 = load i32, ptr %290, align 4, !tbaa !30
  %292 = icmp eq i32 %291, 1
  br i1 %292, label %293, label %311

293:                                              ; preds = %289
  %294 = load i32, ptr %0, align 8, !tbaa !20
  %295 = icmp eq i32 %294, 0
  %296 = load i8, ptr %19, align 1
  %297 = icmp eq i8 %296, -1
  %or.cond22 = select i1 %295, i1 %297, i1 false
  %298 = icmp ugt i32 %2, 20
  %or.cond24 = and i1 %298, %or.cond22
  %299 = icmp ugt i32 %3, 20
  %or.cond26 = and i1 %299, %or.cond24
  br i1 %or.cond26, label %300, label %311

300:                                              ; preds = %293
  %301 = icmp ugt i32 %2, 225
  %302 = icmp ugt i32 %3, 225
  %or.cond28 = and i1 %301, %302
  br i1 %or.cond28, label %311, label %303

303:                                              ; preds = %300
  %304 = mul i32 %3, %2
  %305 = icmp ugt i32 %304, 75000
  br i1 %305, label %311, label %306

306:                                              ; preds = %303
  %307 = icmp ugt i32 %2, 250
  %308 = icmp ugt i32 %304, 40000
  %309 = and i1 %307, %308
  %310 = zext i1 %309 to i32
  br label %311

311:                                              ; preds = %303, %306, %300, %293, %289
  %312 = phi i32 [ 0, %293 ], [ 0, %289 ], [ 1, %303 ], [ %310, %306 ], [ 1, %300 ]
  %313 = getelementptr inbounds i8, ptr %0, i64 1064
  store i32 %312, ptr %313, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #4
  call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %6) #4
  ret i32 0
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL15lodepng_get_bppPK16LodePNGColorMode(ptr noundef) local_unnamed_addr #2

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

; 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 #1

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { nofree nounwind willreturn memory(argmem: read) }
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, !11, i64 1056}
!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 = !{!"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 = !{!13, !7, i64 4}
!13 = !{!"_ZTS16LodePNGColorMode", !14, i64 0, !7, i64 4, !15, i64 8, !11, i64 16, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36}
!14 = !{!"_ZTS16LodePNGColorType", !8, i64 0}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!10, !10, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!6, !7, i64 1048}
!20 = !{!6, !7, i64 0}
!21 = !{!6, !10, i64 8}
!22 = !{!6, !10, i64 10}
!23 = !{!6, !10, i64 12}
!24 = !{!6, !7, i64 4}
!25 = !{!6, !7, i64 16}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = !{!8, !8, i64 0}
!29 = !{!13, !14, i64 0}
!30 = !{!6, !7, i64 20}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = !{!6, !7, i64 1064}


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