; LLVM IR from alibaba/GCanvas :: core/test/linux/util (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 void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) #2

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

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

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

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

60:                                               ; preds = %5
  %61 = load i32, ptr %17, align 4, !tbaa !9
  %62 = icmp eq i32 %61, 1
  br label %63

63:                                               ; preds = %60, %5
  %64 = phi i1 [ false, %5 ], [ %62, %60 ]
  %65 = zext i1 %64 to i64
  %66 = select i1 %64, i32 1, i32 0
  store i32 %66, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 257, ptr %20, align 4, !tbaa !9
  %67 = load i32, ptr %17, align 4, !tbaa !9
  %68 = icmp ule i32 %67, 8
  br i1 %68, label %69, label %87

69:                                               ; preds = %63
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.LodePNGColorStats, ptr %70, i32 0, i32 6
  %72 = load i32, ptr %71, align 4, !tbaa !16
  %73 = load i32, ptr %17, align 4, !tbaa !9
  %74 = shl i32 1, %73
  %75 = add i32 %72, %74
  %76 = icmp ult i32 257, %75
  br i1 %76, label %77, label %78

77:                                               ; preds = %69
  br label %85

78:                                               ; preds = %69
  %79 = load ptr, ptr %6, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.LodePNGColorStats, ptr %79, i32 0, i32 6
  %81 = load i32, ptr %80, align 4, !tbaa !16
  %82 = load i32, ptr %17, align 4, !tbaa !9
  %83 = shl i32 1, %82
  %84 = add i32 %81, %83
  br label %85

85:                                               ; preds = %78, %77
  %86 = phi i32 [ 257, %77 ], [ %84, %78 ]
  store i32 %86, ptr %20, align 4, !tbaa !9
  br label %87

87:                                               ; preds = %85, %63
  %88 = load i64, ptr %13, align 8, !tbaa !11
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.LodePNGColorStats, ptr %89, i32 0, i32 9
  %91 = load i64, ptr %90, align 8, !tbaa !17
  %92 = add i64 %91, %88
  store i64 %92, ptr %90, align 8, !tbaa !17
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.LodePNGColorStats, ptr %93, i32 0, i32 10
  %95 = load i32, ptr %94, align 8, !tbaa !18
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %98, label %97

97:                                               ; preds = %87
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %97, %87
  call void @_ZL15color_tree_initP9ColorTree(ptr noundef %12)
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.LodePNGColorStats, ptr %99, i32 0, i32 5
  %101 = load i32, ptr %100, align 8, !tbaa !19
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %104

103:                                              ; preds = %98
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %103, %98
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.LodePNGColorStats, ptr %105, i32 0, i32 0
  %107 = load i32, ptr %106, align 8, !tbaa !20
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %109, label %110

109:                                              ; preds = %104
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %110

110:                                              ; preds = %109, %104
  %111 = load ptr, ptr %6, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.LodePNGColorStats, ptr %111, i32 0, i32 8
  %113 = load i32, ptr %112, align 8, !tbaa !13
  %114 = icmp eq i32 %113, 16
  br i1 %114, label %115, label %116

115:                                              ; preds = %110
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %116

116:                                              ; preds = %115, %110
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.LodePNGColorStats, ptr %117, i32 0, i32 8
  %119 = load i32, ptr %118, align 8, !tbaa !13
  %120 = load i32, ptr %17, align 4, !tbaa !9
  %121 = icmp uge i32 %119, %120
  br i1 %121, label %122, label %123

122:                                              ; preds = %116
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %122, %116
  %124 = load ptr, ptr %6, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.LodePNGColorStats, ptr %124, i32 0, i32 6
  %126 = load i32, ptr %125, align 4, !tbaa !16
  %127 = load i32, ptr %20, align 4, !tbaa !9
  %128 = icmp uge i32 %126, %127
  br i1 %128, label %129, label %130

129:                                              ; preds = %123
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %129, %123
  %131 = load i32, ptr %16, align 4, !tbaa !9
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %165, label %133

133:                                              ; preds = %130
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %161, %133
  %135 = load i64, ptr %11, align 8, !tbaa !11
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.LodePNGColorStats, ptr %136, i32 0, i32 6
  %138 = load i32, ptr %137, align 4, !tbaa !16
  %139 = zext i32 %138 to i64
  %140 = icmp ult i64 %135, %139
  br i1 %140, label %141, label %164

141:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.LodePNGColorStats, ptr %142, i32 0, i32 7
  %144 = load i64, ptr %11, align 8, !tbaa !11
  %145 = mul i64 %144, 4
  %146 = getelementptr inbounds [1024 x i8], ptr %143, i64 0, i64 %145
  store ptr %146, ptr %21, align 8, !tbaa !5
  %147 = load ptr, ptr %21, align 8, !tbaa !5
  %148 = getelementptr inbounds i8, ptr %147, i64 0
  %149 = load i8, ptr %148, align 1, !tbaa !21
  %150 = load ptr, ptr %21, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i64 1
  %152 = load i8, ptr %151, align 1, !tbaa !21
  %153 = load ptr, ptr %21, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %153, i64 2
  %155 = load i8, ptr %154, align 1, !tbaa !21
  %156 = load ptr, ptr %21, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 3
  %158 = load i8, ptr %157, align 1, !tbaa !21
  %159 = load i64, ptr %11, align 8, !tbaa !11
  %160 = trunc i64 %159 to i32
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %12, i8 noundef zeroext %149, i8 noundef zeroext %152, i8 noundef zeroext %155, i8 noundef zeroext %158, i32 noundef %160)
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  br label %161

161:                                              ; preds = %141
  %162 = load i64, ptr %11, align 8, !tbaa !11
  %163 = add i64 %162, 1
  store i64 %163, ptr %11, align 8, !tbaa !11
  br label %134, !llvm.loop !22

164:                                              ; preds = %134
  br label %165

165:                                              ; preds = %164, %130
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.LodePNGColorMode, ptr %166, i32 0, i32 1
  %168 = load i32, ptr %167, align 4, !tbaa !24
  %169 = icmp eq i32 %168, 16
  br i1 %169, label %170, label %225

170:                                              ; preds = %165
  %171 = load i32, ptr %19, align 4, !tbaa !9
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %225, label %173

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

174:                                              ; preds = %221, %173
  %175 = load i64, ptr %11, align 8, !tbaa !11
  %176 = load i64, ptr %13, align 8, !tbaa !11
  %177 = icmp ne i64 %175, %176
  br i1 %177, label %178, label %224

178:                                              ; preds = %174
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = load i64, ptr %11, align 8, !tbaa !11
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %25, ptr noundef %179, i64 noundef %180, ptr noundef %181)
  %182 = load i16, ptr %22, align 2, !tbaa !27
  %183 = zext i16 %182 to i32
  %184 = and i32 %183, 255
  %185 = load i16, ptr %22, align 2, !tbaa !27
  %186 = zext i16 %185 to i32
  %187 = ashr i32 %186, 8
  %188 = and i32 %187, 255
  %189 = icmp ne i32 %184, %188
  br i1 %189, label %217, label %190

190:                                              ; preds = %178
  %191 = load i16, ptr %23, align 2, !tbaa !27
  %192 = zext i16 %191 to i32
  %193 = and i32 %192, 255
  %194 = load i16, ptr %23, align 2, !tbaa !27
  %195 = zext i16 %194 to i32
  %196 = ashr i32 %195, 8
  %197 = and i32 %196, 255
  %198 = icmp ne i32 %193, %197
  br i1 %198, label %217, label %199

199:                                              ; preds = %190
  %200 = load i16, ptr %24, align 2, !tbaa !27
  %201 = zext i16 %200 to i32
  %202 = and i32 %201, 255
  %203 = load i16, ptr %24, align 2, !tbaa !27
  %204 = zext i16 %203 to i32
  %205 = ashr i32 %204, 8
  %206 = and i32 %205, 255
  %207 = icmp ne i32 %202, %206
  br i1 %207, label %217, label %208

208:                                              ; preds = %199
  %209 = load i16, ptr %25, align 2, !tbaa !27
  %210 = zext i16 %209 to i32
  %211 = and i32 %210, 255
  %212 = load i16, ptr %25, align 2, !tbaa !27
  %213 = zext i16 %212 to i32
  %214 = ashr i32 %213, 8
  %215 = and i32 %214, 255
  %216 = icmp ne i32 %211, %215
  br i1 %216, label %217, label %220

217:                                              ; preds = %208, %199, %190, %178
  %218 = load ptr, ptr %6, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.LodePNGColorStats, ptr %218, i32 0, i32 8
  store i32 16, ptr %219, align 8, !tbaa !13
  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 %224

220:                                              ; preds = %208
  br label %221

221:                                              ; preds = %220
  %222 = load i64, ptr %11, align 8, !tbaa !11
  %223 = add i64 %222, 1
  store i64 %223, ptr %11, align 8, !tbaa !11
  br label %174, !llvm.loop !28

224:                                              ; preds = %217, %174
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #3
  br label %225

225:                                              ; preds = %224, %170, %165
  %226 = load i32, ptr %19, align 4, !tbaa !9
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %424

228:                                              ; preds = %225
  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
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #3
  store i16 0, ptr %29, align 2, !tbaa !27
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %229

229:                                              ; preds = %364, %228
  %230 = load i64, ptr %11, align 8, !tbaa !11
  %231 = load i64, ptr %13, align 8, !tbaa !11
  %232 = icmp ne i64 %230, %231
  br i1 %232, label %233, label %367

233:                                              ; preds = %229
  %234 = load ptr, ptr %7, align 8, !tbaa !5
  %235 = load i64, ptr %11, align 8, !tbaa !11
  %236 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %29, ptr noundef %234, i64 noundef %235, ptr noundef %236)
  %237 = load i32, ptr %14, align 4, !tbaa !9
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %254, label %239

239:                                              ; preds = %233
  %240 = load i16, ptr %26, align 2, !tbaa !27
  %241 = zext i16 %240 to i32
  %242 = load i16, ptr %27, align 2, !tbaa !27
  %243 = zext i16 %242 to i32
  %244 = icmp ne i32 %241, %243
  br i1 %244, label %251, label %245

245:                                              ; preds = %239
  %246 = load i16, ptr %26, align 2, !tbaa !27
  %247 = zext i16 %246 to i32
  %248 = load i16, ptr %28, align 2, !tbaa !27
  %249 = zext i16 %248 to i32
  %250 = icmp ne i32 %247, %249
  br i1 %250, label %251, label %254

251:                                              ; preds = %245, %239
  %252 = load ptr, ptr %6, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.LodePNGColorStats, ptr %252, i32 0, i32 0
  store i32 1, ptr %253, align 8, !tbaa !20
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %254

254:                                              ; preds = %251, %245, %233
  %255 = load i32, ptr %15, align 4, !tbaa !9
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %350, label %257

257:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %258 = load i16, ptr %26, align 2, !tbaa !27
  %259 = zext i16 %258 to i32
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.LodePNGColorStats, ptr %260, i32 0, i32 2
  %262 = load i16, ptr %261, align 8, !tbaa !29
  %263 = zext i16 %262 to i32
  %264 = icmp eq i32 %259, %263
  br i1 %264, label %265, label %281

265:                                              ; preds = %257
  %266 = load i16, ptr %27, align 2, !tbaa !27
  %267 = zext i16 %266 to i32
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.LodePNGColorStats, ptr %268, i32 0, i32 3
  %270 = load i16, ptr %269, align 2, !tbaa !30
  %271 = zext i16 %270 to i32
  %272 = icmp eq i32 %267, %271
  br i1 %272, label %273, label %281

273:                                              ; preds = %265
  %274 = load i16, ptr %28, align 2, !tbaa !27
  %275 = zext i16 %274 to i32
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.LodePNGColorStats, ptr %276, i32 0, i32 4
  %278 = load i16, ptr %277, align 4, !tbaa !31
  %279 = zext i16 %278 to i32
  %280 = icmp eq i32 %275, %279
  br label %281

281:                                              ; preds = %273, %265, %257
  %282 = phi i1 [ false, %265 ], [ false, %257 ], [ %280, %273 ]
  %283 = zext i1 %282 to i32
  store i32 %283, ptr %30, align 4, !tbaa !9
  %284 = load i16, ptr %29, align 2, !tbaa !27
  %285 = zext i16 %284 to i32
  %286 = icmp ne i32 %285, 65535
  br i1 %286, label %287, label %304

287:                                              ; preds = %281
  %288 = load i16, ptr %29, align 2, !tbaa !27
  %289 = zext i16 %288 to i32
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %299, label %291

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

296:                                              ; preds = %291
  %297 = load i32, ptr %30, align 4, !tbaa !9
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %304, label %299

299:                                              ; preds = %296, %287
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.LodePNGColorStats, ptr %300, i32 0, i32 5
  store i32 1, ptr %301, align 8, !tbaa !19
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.LodePNGColorStats, ptr %302, i32 0, i32 1
  store i32 0, ptr %303, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %349

304:                                              ; preds = %296, %291, %281
  %305 = load i16, ptr %29, align 2, !tbaa !27
  %306 = zext i16 %305 to i32
  %307 = icmp eq i32 %306, 0
  br i1 %307, label %308, label %330

308:                                              ; preds = %304
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.LodePNGColorStats, ptr %309, i32 0, i32 5
  %311 = load i32, ptr %310, align 8, !tbaa !19
  %312 = icmp ne i32 %311, 0
  br i1 %312, label %330, label %313

313:                                              ; preds = %308
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.LodePNGColorStats, ptr %314, i32 0, i32 1
  %316 = load i32, ptr %315, align 4, !tbaa !32
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %330, label %318

318:                                              ; preds = %313
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.LodePNGColorStats, ptr %319, i32 0, i32 1
  store i32 1, ptr %320, align 4, !tbaa !32
  %321 = load i16, ptr %26, align 2, !tbaa !27
  %322 = load ptr, ptr %6, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.LodePNGColorStats, ptr %322, i32 0, i32 2
  store i16 %321, ptr %323, align 8, !tbaa !29
  %324 = load i16, ptr %27, align 2, !tbaa !27
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.LodePNGColorStats, ptr %325, i32 0, i32 3
  store i16 %324, ptr %326, align 2, !tbaa !30
  %327 = load i16, ptr %28, align 2, !tbaa !27
  %328 = load ptr, ptr %6, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.LodePNGColorStats, ptr %328, i32 0, i32 4
  store i16 %327, ptr %329, align 4, !tbaa !31
  br label %348

330:                                              ; preds = %313, %308, %304
  %331 = load i16, ptr %29, align 2, !tbaa !27
  %332 = zext i16 %331 to i32
  %333 = icmp eq i32 %332, 65535
  br i1 %333, label %334, label %347

334:                                              ; preds = %330
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.LodePNGColorStats, ptr %335, i32 0, i32 1
  %337 = load i32, ptr %336, align 4, !tbaa !32
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %347

339:                                              ; preds = %334
  %340 = load i32, ptr %30, align 4, !tbaa !9
  %341 = icmp ne i32 %340, 0
  br i1 %341, label %342, label %347

342:                                              ; preds = %339
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.LodePNGColorStats, ptr %343, i32 0, i32 5
  store i32 1, ptr %344, align 8, !tbaa !19
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.LodePNGColorStats, ptr %345, i32 0, i32 1
  store i32 0, ptr %346, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %347

347:                                              ; preds = %342, %339, %334, %330
  br label %348

348:                                              ; preds = %347, %318
  br label %349

349:                                              ; preds = %348, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  br label %350

350:                                              ; preds = %349, %254
  %351 = load i32, ptr %15, align 4, !tbaa !9
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %353, label %363

353:                                              ; preds = %350
  %354 = load i32, ptr %16, align 4, !tbaa !9
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %356, label %363

356:                                              ; preds = %353
  %357 = load i32, ptr %14, align 4, !tbaa !9
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %363

359:                                              ; preds = %356
  %360 = load i32, ptr %18, align 4, !tbaa !9
  %361 = icmp ne i32 %360, 0
  br i1 %361, label %362, label %363

362:                                              ; preds = %359
  br label %367

363:                                              ; preds = %359, %356, %353, %350
  br label %364

364:                                              ; preds = %363
  %365 = load i64, ptr %11, align 8, !tbaa !11
  %366 = add i64 %365, 1
  store i64 %366, ptr %11, align 8, !tbaa !11
  br label %229, !llvm.loop !33

367:                                              ; preds = %362, %229
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.LodePNGColorStats, ptr %368, i32 0, i32 1
  %370 = load i32, ptr %369, align 4, !tbaa !32
  %371 = icmp ne i32 %370, 0
  br i1 %371, label %372, label %423

372:                                              ; preds = %367
  %373 = load ptr, ptr %6, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.LodePNGColorStats, ptr %373, i32 0, i32 5
  %375 = load i32, ptr %374, align 8, !tbaa !19
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %423, label %377

377:                                              ; preds = %372
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %378

378:                                              ; preds = %419, %377
  %379 = load i64, ptr %11, align 8, !tbaa !11
  %380 = load i64, ptr %13, align 8, !tbaa !11
  %381 = icmp ne i64 %379, %380
  br i1 %381, label %382, label %422

382:                                              ; preds = %378
  %383 = load ptr, ptr %7, align 8, !tbaa !5
  %384 = load i64, ptr %11, align 8, !tbaa !11
  %385 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL19getPixelColorRGBA16PtS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %29, ptr noundef %383, i64 noundef %384, ptr noundef %385)
  %386 = load i16, ptr %29, align 2, !tbaa !27
  %387 = zext i16 %386 to i32
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %418

389:                                              ; preds = %382
  %390 = load i16, ptr %26, align 2, !tbaa !27
  %391 = zext i16 %390 to i32
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.LodePNGColorStats, ptr %392, i32 0, i32 2
  %394 = load i16, ptr %393, align 8, !tbaa !29
  %395 = zext i16 %394 to i32
  %396 = icmp eq i32 %391, %395
  br i1 %396, label %397, label %418

397:                                              ; preds = %389
  %398 = load i16, ptr %27, align 2, !tbaa !27
  %399 = zext i16 %398 to i32
  %400 = load ptr, ptr %6, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.LodePNGColorStats, ptr %400, i32 0, i32 3
  %402 = load i16, ptr %401, align 2, !tbaa !30
  %403 = zext i16 %402 to i32
  %404 = icmp eq i32 %399, %403
  br i1 %404, label %405, label %418

405:                                              ; preds = %397
  %406 = load i16, ptr %28, align 2, !tbaa !27
  %407 = zext i16 %406 to i32
  %408 = load ptr, ptr %6, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.LodePNGColorStats, ptr %408, i32 0, i32 4
  %410 = load i16, ptr %409, align 4, !tbaa !31
  %411 = zext i16 %410 to i32
  %412 = icmp eq i32 %407, %411
  br i1 %412, label %413, label %418

413:                                              ; preds = %405
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.LodePNGColorStats, ptr %414, i32 0, i32 5
  store i32 1, ptr %415, align 8, !tbaa !19
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.LodePNGColorStats, ptr %416, i32 0, i32 1
  store i32 0, ptr %417, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %418

418:                                              ; preds = %413, %405, %397, %389, %382
  br label %419

419:                                              ; preds = %418
  %420 = load i64, ptr %11, align 8, !tbaa !11
  %421 = add i64 %420, 1
  store i64 %421, ptr %11, align 8, !tbaa !11
  br label %378, !llvm.loop !34

422:                                              ; preds = %378
  br label %423

423:                                              ; preds = %422, %372, %367
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #3
  br label %784

424:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #3
  store i8 0, ptr %31, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #3
  store i8 0, ptr %32, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #3
  store i8 0, ptr %33, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #3
  store i8 0, ptr %34, align 1, !tbaa !21
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %425

425:                                              ; preds = %683, %424
  %426 = load i64, ptr %11, align 8, !tbaa !11
  %427 = load i64, ptr %13, align 8, !tbaa !11
  %428 = icmp ne i64 %426, %427
  br i1 %428, label %429, label %686

429:                                              ; preds = %425
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = load i64, ptr %11, align 8, !tbaa !11
  %432 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %430, i64 noundef %431, ptr noundef %432)
  %433 = load i32, ptr %18, align 4, !tbaa !9
  %434 = icmp ne i32 %433, 0
  br i1 %434, label %453, label %435

435:                                              ; preds = %429
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.LodePNGColorStats, ptr %436, i32 0, i32 8
  %438 = load i32, ptr %437, align 8, !tbaa !13
  %439 = icmp ult i32 %438, 8
  br i1 %439, label %440, label %453

440:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %441 = load i8, ptr %31, align 1, !tbaa !21
  %442 = call noundef i32 @_ZL20getValueRequiredBitsh(i8 noundef zeroext %441)
  store i32 %442, ptr %35, align 4, !tbaa !9
  %443 = load i32, ptr %35, align 4, !tbaa !9
  %444 = load ptr, ptr %6, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.LodePNGColorStats, ptr %444, i32 0, i32 8
  %446 = load i32, ptr %445, align 8, !tbaa !13
  %447 = icmp ugt i32 %443, %446
  br i1 %447, label %448, label %452

448:                                              ; preds = %440
  %449 = load i32, ptr %35, align 4, !tbaa !9
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.LodePNGColorStats, ptr %450, i32 0, i32 8
  store i32 %449, ptr %451, align 8, !tbaa !13
  br label %452

452:                                              ; preds = %448, %440
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  br label %453

453:                                              ; preds = %452, %435, %429
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.LodePNGColorStats, ptr %454, i32 0, i32 8
  %456 = load i32, ptr %455, align 8, !tbaa !13
  %457 = load i32, ptr %17, align 4, !tbaa !9
  %458 = icmp uge i32 %456, %457
  %459 = zext i1 %458 to i32
  store i32 %459, ptr %18, align 4, !tbaa !9
  %460 = load i32, ptr %14, align 4, !tbaa !9
  %461 = icmp ne i32 %460, 0
  br i1 %461, label %485, label %462

462:                                              ; preds = %453
  %463 = load i8, ptr %31, align 1, !tbaa !21
  %464 = zext i8 %463 to i32
  %465 = load i8, ptr %32, align 1, !tbaa !21
  %466 = zext i8 %465 to i32
  %467 = icmp ne i32 %464, %466
  br i1 %467, label %474, label %468

468:                                              ; preds = %462
  %469 = load i8, ptr %31, align 1, !tbaa !21
  %470 = zext i8 %469 to i32
  %471 = load i8, ptr %33, align 1, !tbaa !21
  %472 = zext i8 %471 to i32
  %473 = icmp ne i32 %470, %472
  br i1 %473, label %474, label %485

474:                                              ; preds = %468, %462
  %475 = load ptr, ptr %6, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.LodePNGColorStats, ptr %475, i32 0, i32 0
  store i32 1, ptr %476, align 8, !tbaa !20
  store i32 1, ptr %14, align 4, !tbaa !9
  %477 = load ptr, ptr %6, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.LodePNGColorStats, ptr %477, i32 0, i32 8
  %479 = load i32, ptr %478, align 8, !tbaa !13
  %480 = icmp ult i32 %479, 8
  br i1 %480, label %481, label %484

481:                                              ; preds = %474
  %482 = load ptr, ptr %6, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.LodePNGColorStats, ptr %482, i32 0, i32 8
  store i32 8, ptr %483, align 8, !tbaa !13
  br label %484

484:                                              ; preds = %481, %474
  br label %485

485:                                              ; preds = %484, %468, %453
  %486 = load i32, ptr %15, align 4, !tbaa !9
  %487 = icmp ne i32 %486, 0
  br i1 %487, label %600, label %488

488:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  %489 = load i8, ptr %31, align 1, !tbaa !21
  %490 = zext i8 %489 to i32
  %491 = load ptr, ptr %6, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.LodePNGColorStats, ptr %491, i32 0, i32 2
  %493 = load i16, ptr %492, align 8, !tbaa !29
  %494 = zext i16 %493 to i32
  %495 = icmp eq i32 %490, %494
  br i1 %495, label %496, label %512

496:                                              ; preds = %488
  %497 = load i8, ptr %32, align 1, !tbaa !21
  %498 = zext i8 %497 to i32
  %499 = load ptr, ptr %6, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.LodePNGColorStats, ptr %499, i32 0, i32 3
  %501 = load i16, ptr %500, align 2, !tbaa !30
  %502 = zext i16 %501 to i32
  %503 = icmp eq i32 %498, %502
  br i1 %503, label %504, label %512

504:                                              ; preds = %496
  %505 = load i8, ptr %33, align 1, !tbaa !21
  %506 = zext i8 %505 to i32
  %507 = load ptr, ptr %6, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.LodePNGColorStats, ptr %507, i32 0, i32 4
  %509 = load i16, ptr %508, align 4, !tbaa !31
  %510 = zext i16 %509 to i32
  %511 = icmp eq i32 %506, %510
  br label %512

512:                                              ; preds = %504, %496, %488
  %513 = phi i1 [ false, %496 ], [ false, %488 ], [ %511, %504 ]
  %514 = zext i1 %513 to i32
  store i32 %514, ptr %36, align 4, !tbaa !9
  %515 = load i8, ptr %34, align 1, !tbaa !21
  %516 = zext i8 %515 to i32
  %517 = icmp ne i32 %516, 255
  br i1 %517, label %518, label %543

518:                                              ; preds = %512
  %519 = load i8, ptr %34, align 1, !tbaa !21
  %520 = zext i8 %519 to i32
  %521 = icmp ne i32 %520, 0
  br i1 %521, label %530, label %522

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

527:                                              ; preds = %522
  %528 = load i32, ptr %36, align 4, !tbaa !9
  %529 = icmp ne i32 %528, 0
  br i1 %529, label %543, label %530

530:                                              ; preds = %527, %518
  %531 = load ptr, ptr %6, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.LodePNGColorStats, ptr %531, i32 0, i32 5
  store i32 1, ptr %532, align 8, !tbaa !19
  %533 = load ptr, ptr %6, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.LodePNGColorStats, ptr %533, i32 0, i32 1
  store i32 0, ptr %534, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  %535 = load ptr, ptr %6, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.LodePNGColorStats, ptr %535, i32 0, i32 8
  %537 = load i32, ptr %536, align 8, !tbaa !13
  %538 = icmp ult i32 %537, 8
  br i1 %538, label %539, label %542

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

542:                                              ; preds = %539, %530
  br label %599

543:                                              ; preds = %527, %522, %512
  %544 = load i8, ptr %34, align 1, !tbaa !21
  %545 = zext i8 %544 to i32
  %546 = icmp eq i32 %545, 0
  br i1 %546, label %547, label %572

547:                                              ; preds = %543
  %548 = load ptr, ptr %6, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.LodePNGColorStats, ptr %548, i32 0, i32 5
  %550 = load i32, ptr %549, align 8, !tbaa !19
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %572, label %552

552:                                              ; preds = %547
  %553 = load ptr, ptr %6, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.LodePNGColorStats, ptr %553, i32 0, i32 1
  %555 = load i32, ptr %554, align 4, !tbaa !32
  %556 = icmp ne i32 %555, 0
  br i1 %556, label %572, label %557

557:                                              ; preds = %552
  %558 = load ptr, ptr %6, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.LodePNGColorStats, ptr %558, i32 0, i32 1
  store i32 1, ptr %559, align 4, !tbaa !32
  %560 = load i8, ptr %31, align 1, !tbaa !21
  %561 = zext i8 %560 to i16
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.LodePNGColorStats, ptr %562, i32 0, i32 2
  store i16 %561, ptr %563, align 8, !tbaa !29
  %564 = load i8, ptr %32, align 1, !tbaa !21
  %565 = zext i8 %564 to i16
  %566 = load ptr, ptr %6, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.LodePNGColorStats, ptr %566, i32 0, i32 3
  store i16 %565, ptr %567, align 2, !tbaa !30
  %568 = load i8, ptr %33, align 1, !tbaa !21
  %569 = zext i8 %568 to i16
  %570 = load ptr, ptr %6, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.LodePNGColorStats, ptr %570, i32 0, i32 4
  store i16 %569, ptr %571, align 4, !tbaa !31
  br label %598

572:                                              ; preds = %552, %547, %543
  %573 = load i8, ptr %34, align 1, !tbaa !21
  %574 = zext i8 %573 to i32
  %575 = icmp eq i32 %574, 255
  br i1 %575, label %576, label %597

576:                                              ; preds = %572
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.LodePNGColorStats, ptr %577, i32 0, i32 1
  %579 = load i32, ptr %578, align 4, !tbaa !32
  %580 = icmp ne i32 %579, 0
  br i1 %580, label %581, label %597

581:                                              ; preds = %576
  %582 = load i32, ptr %36, align 4, !tbaa !9
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %597

584:                                              ; preds = %581
  %585 = load ptr, ptr %6, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.LodePNGColorStats, ptr %585, i32 0, i32 5
  store i32 1, ptr %586, align 8, !tbaa !19
  %587 = load ptr, ptr %6, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.LodePNGColorStats, ptr %587, i32 0, i32 1
  store i32 0, ptr %588, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.LodePNGColorStats, ptr %589, i32 0, i32 8
  %591 = load i32, ptr %590, align 8, !tbaa !13
  %592 = icmp ult i32 %591, 8
  br i1 %592, label %593, label %596

593:                                              ; preds = %584
  %594 = load ptr, ptr %6, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.LodePNGColorStats, ptr %594, i32 0, i32 8
  store i32 8, ptr %595, align 8, !tbaa !13
  br label %596

596:                                              ; preds = %593, %584
  br label %597

597:                                              ; preds = %596, %581, %576, %572
  br label %598

598:                                              ; preds = %597, %557
  br label %599

599:                                              ; preds = %598, %542
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  br label %600

600:                                              ; preds = %599, %485
  %601 = load i32, ptr %16, align 4, !tbaa !9
  %602 = icmp ne i32 %601, 0
  br i1 %602, label %669, label %603

603:                                              ; preds = %600
  %604 = load i8, ptr %31, align 1, !tbaa !21
  %605 = load i8, ptr %32, align 1, !tbaa !21
  %606 = load i8, ptr %33, align 1, !tbaa !21
  %607 = load i8, ptr %34, align 1, !tbaa !21
  %608 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef %12, i8 noundef zeroext %604, i8 noundef zeroext %605, i8 noundef zeroext %606, i8 noundef zeroext %607)
  %609 = icmp ne i32 %608, 0
  br i1 %609, label %668, label %610

610:                                              ; preds = %603
  %611 = load i8, ptr %31, align 1, !tbaa !21
  %612 = load i8, ptr %32, align 1, !tbaa !21
  %613 = load i8, ptr %33, align 1, !tbaa !21
  %614 = load i8, ptr %34, align 1, !tbaa !21
  %615 = load ptr, ptr %6, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.LodePNGColorStats, ptr %615, i32 0, i32 6
  %617 = load i32, ptr %616, align 4, !tbaa !16
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef %12, i8 noundef zeroext %611, i8 noundef zeroext %612, i8 noundef zeroext %613, i8 noundef zeroext %614, i32 noundef %617)
  %618 = load ptr, ptr %6, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.LodePNGColorStats, ptr %618, i32 0, i32 6
  %620 = load i32, ptr %619, align 4, !tbaa !16
  %621 = icmp ult i32 %620, 256
  br i1 %621, label %622, label %657

622:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %623 = load ptr, ptr %6, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.LodePNGColorStats, ptr %623, i32 0, i32 7
  %625 = getelementptr inbounds [1024 x i8], ptr %624, i64 0, i64 0
  store ptr %625, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %626 = load ptr, ptr %6, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.LodePNGColorStats, ptr %626, i32 0, i32 6
  %628 = load i32, ptr %627, align 4, !tbaa !16
  store i32 %628, ptr %38, align 4, !tbaa !9
  %629 = load i8, ptr %31, align 1, !tbaa !21
  %630 = load ptr, ptr %37, align 8, !tbaa !5
  %631 = load i32, ptr %38, align 4, !tbaa !9
  %632 = mul i32 %631, 4
  %633 = add i32 %632, 0
  %634 = zext i32 %633 to i64
  %635 = getelementptr inbounds i8, ptr %630, i64 %634
  store i8 %629, ptr %635, align 1, !tbaa !21
  %636 = load i8, ptr %32, align 1, !tbaa !21
  %637 = load ptr, ptr %37, align 8, !tbaa !5
  %638 = load i32, ptr %38, align 4, !tbaa !9
  %639 = mul i32 %638, 4
  %640 = add i32 %639, 1
  %641 = zext i32 %640 to i64
  %642 = getelementptr inbounds i8, ptr %637, i64 %641
  store i8 %636, ptr %642, align 1, !tbaa !21
  %643 = load i8, ptr %33, align 1, !tbaa !21
  %644 = load ptr, ptr %37, align 8, !tbaa !5
  %645 = load i32, ptr %38, align 4, !tbaa !9
  %646 = mul i32 %645, 4
  %647 = add i32 %646, 2
  %648 = zext i32 %647 to i64
  %649 = getelementptr inbounds i8, ptr %644, i64 %648
  store i8 %643, ptr %649, align 1, !tbaa !21
  %650 = load i8, ptr %34, align 1, !tbaa !21
  %651 = load ptr, ptr %37, align 8, !tbaa !5
  %652 = load i32, ptr %38, align 4, !tbaa !9
  %653 = mul i32 %652, 4
  %654 = add i32 %653, 3
  %655 = zext i32 %654 to i64
  %656 = getelementptr inbounds i8, ptr %651, i64 %655
  store i8 %650, ptr %656, align 1, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  br label %657

657:                                              ; preds = %622, %610
  %658 = load ptr, ptr %6, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.LodePNGColorStats, ptr %658, i32 0, i32 6
  %660 = load i32, ptr %659, align 4, !tbaa !16
  %661 = add i32 %660, 1
  store i32 %661, ptr %659, align 4, !tbaa !16
  %662 = load ptr, ptr %6, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.LodePNGColorStats, ptr %662, i32 0, i32 6
  %664 = load i32, ptr %663, align 4, !tbaa !16
  %665 = load i32, ptr %20, align 4, !tbaa !9
  %666 = icmp uge i32 %664, %665
  %667 = zext i1 %666 to i32
  store i32 %667, ptr %16, align 4, !tbaa !9
  br label %668

668:                                              ; preds = %657, %603
  br label %669

669:                                              ; preds = %668, %600
  %670 = load i32, ptr %15, align 4, !tbaa !9
  %671 = icmp ne i32 %670, 0
  br i1 %671, label %672, label %682

672:                                              ; preds = %669
  %673 = load i32, ptr %16, align 4, !tbaa !9
  %674 = icmp ne i32 %673, 0
  br i1 %674, label %675, label %682

675:                                              ; preds = %672
  %676 = load i32, ptr %14, align 4, !tbaa !9
  %677 = icmp ne i32 %676, 0
  br i1 %677, label %678, label %682

678:                                              ; preds = %675
  %679 = load i32, ptr %18, align 4, !tbaa !9
  %680 = icmp ne i32 %679, 0
  br i1 %680, label %681, label %682

681:                                              ; preds = %678
  br label %686

682:                                              ; preds = %678, %675, %672, %669
  br label %683

683:                                              ; preds = %682
  %684 = load i64, ptr %11, align 8, !tbaa !11
  %685 = add i64 %684, 1
  store i64 %685, ptr %11, align 8, !tbaa !11
  br label %425, !llvm.loop !35

686:                                              ; preds = %681, %425
  %687 = load ptr, ptr %6, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.LodePNGColorStats, ptr %687, i32 0, i32 1
  %689 = load i32, ptr %688, align 4, !tbaa !32
  %690 = icmp ne i32 %689, 0
  br i1 %690, label %691, label %750

691:                                              ; preds = %686
  %692 = load ptr, ptr %6, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.LodePNGColorStats, ptr %692, i32 0, i32 5
  %694 = load i32, ptr %693, align 8, !tbaa !19
  %695 = icmp ne i32 %694, 0
  br i1 %695, label %750, label %696

696:                                              ; preds = %691
  store i64 0, ptr %11, align 8, !tbaa !11
  br label %697

697:                                              ; preds = %746, %696
  %698 = load i64, ptr %11, align 8, !tbaa !11
  %699 = load i64, ptr %13, align 8, !tbaa !11
  %700 = icmp ne i64 %698, %699
  br i1 %700, label %701, label %749

701:                                              ; preds = %697
  %702 = load ptr, ptr %7, align 8, !tbaa !5
  %703 = load i64, ptr %11, align 8, !tbaa !11
  %704 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZL18getPixelColorRGBA8PhS_S_S_PKhmPK16LodePNGColorMode(ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %702, i64 noundef %703, ptr noundef %704)
  %705 = load i8, ptr %34, align 1, !tbaa !21
  %706 = zext i8 %705 to i32
  %707 = icmp ne i32 %706, 0
  br i1 %707, label %708, label %745

708:                                              ; preds = %701
  %709 = load i8, ptr %31, align 1, !tbaa !21
  %710 = zext i8 %709 to i32
  %711 = load ptr, ptr %6, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.LodePNGColorStats, ptr %711, i32 0, i32 2
  %713 = load i16, ptr %712, align 8, !tbaa !29
  %714 = zext i16 %713 to i32
  %715 = icmp eq i32 %710, %714
  br i1 %715, label %716, label %745

716:                                              ; preds = %708
  %717 = load i8, ptr %32, align 1, !tbaa !21
  %718 = zext i8 %717 to i32
  %719 = load ptr, ptr %6, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.LodePNGColorStats, ptr %719, i32 0, i32 3
  %721 = load i16, ptr %720, align 2, !tbaa !30
  %722 = zext i16 %721 to i32
  %723 = icmp eq i32 %718, %722
  br i1 %723, label %724, label %745

724:                                              ; preds = %716
  %725 = load i8, ptr %33, align 1, !tbaa !21
  %726 = zext i8 %725 to i32
  %727 = load ptr, ptr %6, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.LodePNGColorStats, ptr %727, i32 0, i32 4
  %729 = load i16, ptr %728, align 4, !tbaa !31
  %730 = zext i16 %729 to i32
  %731 = icmp eq i32 %726, %730
  br i1 %731, label %732, label %745

732:                                              ; preds = %724
  %733 = load ptr, ptr %6, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.LodePNGColorStats, ptr %733, i32 0, i32 5
  store i32 1, ptr %734, align 8, !tbaa !19
  %735 = load ptr, ptr %6, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.LodePNGColorStats, ptr %735, i32 0, i32 1
  store i32 0, ptr %736, align 4, !tbaa !32
  store i32 1, ptr %15, align 4, !tbaa !9
  %737 = load ptr, ptr %6, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.LodePNGColorStats, ptr %737, i32 0, i32 8
  %739 = load i32, ptr %738, align 8, !tbaa !13
  %740 = icmp ult i32 %739, 8
  br i1 %740, label %741, label %744

741:                                              ; preds = %732
  %742 = load ptr, ptr %6, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.LodePNGColorStats, ptr %742, i32 0, i32 8
  store i32 8, ptr %743, align 8, !tbaa !13
  br label %744

744:                                              ; preds = %741, %732
  br label %745

745:                                              ; preds = %744, %724, %716, %708, %701
  br label %746

746:                                              ; preds = %745
  %747 = load i64, ptr %11, align 8, !tbaa !11
  %748 = add i64 %747, 1
  store i64 %748, ptr %11, align 8, !tbaa !11
  br label %697, !llvm.loop !36

749:                                              ; preds = %697
  br label %750

750:                                              ; preds = %749, %691, %686
  %751 = load ptr, ptr %6, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.LodePNGColorStats, ptr %751, i32 0, i32 2
  %753 = load i16, ptr %752, align 8, !tbaa !29
  %754 = zext i16 %753 to i32
  %755 = shl i32 %754, 8
  %756 = load ptr, ptr %6, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.LodePNGColorStats, ptr %756, i32 0, i32 2
  %758 = load i16, ptr %757, align 8, !tbaa !29
  %759 = zext i16 %758 to i32
  %760 = add nsw i32 %759, %755
  %761 = trunc i32 %760 to i16
  store i16 %761, ptr %757, align 8, !tbaa !29
  %762 = load ptr, ptr %6, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.LodePNGColorStats, ptr %762, i32 0, i32 3
  %764 = load i16, ptr %763, align 2, !tbaa !30
  %765 = zext i16 %764 to i32
  %766 = shl i32 %765, 8
  %767 = load ptr, ptr %6, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.LodePNGColorStats, ptr %767, i32 0, i32 3
  %769 = load i16, ptr %768, align 2, !tbaa !30
  %770 = zext i16 %769 to i32
  %771 = add nsw i32 %770, %766
  %772 = trunc i32 %771 to i16
  store i16 %772, ptr %768, align 2, !tbaa !30
  %773 = load ptr, ptr %6, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.LodePNGColorStats, ptr %773, i32 0, i32 4
  %775 = load i16, ptr %774, align 4, !tbaa !31
  %776 = zext i16 %775 to i32
  %777 = shl i32 %776, 8
  %778 = load ptr, ptr %6, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.LodePNGColorStats, ptr %778, i32 0, i32 4
  %780 = load i16, ptr %779, align 4, !tbaa !31
  %781 = zext i16 %780 to i32
  %782 = add nsw i32 %781, %777
  %783 = trunc i32 %782 to i16
  store i16 %783, ptr %779, align 4, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #3
  br label %784

784:                                              ; preds = %750, %423
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef %12)
  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 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 136, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  ret void
}

; 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 void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_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)
  %.not220 = 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
  %.0211 = 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
  %.not221 = 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
  %.not222 = icmp ne i32 %43, 0
  %narrow = or i1 %.not220, %.not222
  %.0192 = zext i1 %narrow to i32
  %44 = load i32, ptr %0, align 8, !tbaa !16
  %45 = or i32 %44, %22
  %narrow294 = icmp ne i32 %45, 0
  %.0187 = zext i1 %narrow294 to i32
  %46 = load i32, ptr %25, align 8, !tbaa !5
  %47 = icmp eq i32 %46, 16
  %.not224 = icmp uge i32 %46, %24
  %narrow296 = select i1 %.not224, i1 true, i1 %29
  %48 = getelementptr inbounds i8, ptr %0, i64 20
  %49 = load i32, ptr %48, align 4, !tbaa !12
  %.not225 = icmp uge i32 %49, %.0211
  %50 = select i1 %.not225, i1 true, i1 %47
  %narrow297 = select i1 %50, i1 true, i1 %.not221
  %.2200 = zext i1 %narrow297 to i32
  %.not = icmp eq i32 %49, 0
  %or.cond322 = or i1 %narrow297, %.not
  br i1 %or.cond322, label %.loopexit301, label %.lr.ph

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

52:                                               ; preds = %.lr.ph, %52
  %.0302 = phi i64 [ 0, %.lr.ph ], [ %63, %52 ]
  %53 = shl nuw nsw i64 %.0302, 2
  %54 = getelementptr inbounds [1024 x i8], ptr %51, i64 0, i64 %53
  %55 = load i8, ptr %54, align 1, !tbaa !17
  %56 = getelementptr inbounds i8, ptr %54, i64 1
  %57 = load i8, ptr %56, align 1, !tbaa !17
  %58 = getelementptr inbounds i8, ptr %54, i64 2
  %59 = load i8, ptr %58, align 1, !tbaa !17
  %60 = getelementptr inbounds i8, ptr %54, i64 3
  %61 = load i8, ptr %60, align 1, !tbaa !17
  %62 = trunc nuw i64 %.0302 to i32
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %55, i8 noundef zeroext %57, i8 noundef zeroext %59, i8 noundef zeroext %61, i32 noundef %62)
  %63 = add nuw nsw i64 %.0302, 1
  %64 = load i32, ptr %48, align 4, !tbaa !12
  %65 = zext i32 %64 to i64
  %66 = icmp ult i64 %63, %65
  br i1 %66, label %52, label %.loopexit301, !llvm.loop !18

.loopexit301:                                     ; preds = %52, %36
  %67 = getelementptr inbounds i8, ptr %4, i64 4
  %68 = load i32, ptr %67, align 4, !tbaa !20
  %.not227 = icmp eq i32 %68, 16
  br i1 %.not227, label %69, label %.thread

69:                                               ; preds = %.loopexit301
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %10) #4
  %.not228303 = icmp eq i64 %21, 0
  br i1 %.not228303, label %.thread271, label %.lr.ph305

70:                                               ; preds = %86
  %71 = add nuw i64 %.1304, 1
  %.not228 = icmp eq i64 %71, %21
  br i1 %.not228, label %.thread271, label %.lr.ph305, !llvm.loop !24

.thread271:                                       ; preds = %70, %69
  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.ph305:                                        ; preds = %69, %70
  %.1304 = phi i64 [ %71, %70 ], [ 0, %69 ]
  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 %.1304, ptr noundef %4)
  %72 = load i16, ptr %7, align 2, !tbaa !25
  %73 = zext i16 %72 to i32
  %74 = and i32 %73, 255
  %75 = lshr i32 %73, 8
  %.not229 = icmp eq i32 %74, %75
  br i1 %.not229, label %76, label %91

76:                                               ; preds = %.lr.ph305
  %77 = load i16, ptr %8, align 2, !tbaa !25
  %78 = zext i16 %77 to i32
  %79 = and i32 %78, 255
  %80 = lshr i32 %78, 8
  %.not230 = icmp eq i32 %79, %80
  br i1 %.not230, label %81, label %91

81:                                               ; preds = %76
  %82 = load i16, ptr %9, align 2, !tbaa !25
  %83 = zext i16 %82 to i32
  %84 = and i32 %83, 255
  %85 = lshr i32 %83, 8
  %.not231 = icmp eq i32 %84, %85
  br i1 %.not231, label %86, label %91

86:                                               ; preds = %81
  %87 = load i16, ptr %10, align 2, !tbaa !25
  %88 = zext i16 %87 to i32
  %89 = and i32 %88, 255
  %90 = lshr i32 %88, 8
  %.not232 = icmp eq i32 %89, %90
  br i1 %.not232, label %70, label %91

91:                                               ; preds = %86, %81, %76, %.lr.ph305
  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 !25
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %12) #4
  store i16 0, ptr %12, align 2, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #4
  store i16 0, ptr %13, align 2, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %14) #4
  store i16 0, ptr %14, align 2, !tbaa !25
  %92 = getelementptr inbounds i8, ptr %0, i64 8
  %93 = getelementptr inbounds i8, ptr %0, i64 10
  %94 = getelementptr inbounds i8, ptr %0, i64 12
  %95 = getelementptr inbounds i8, ptr %0, i64 4
  br label %96

96:                                               ; preds = %91, %.thread279
  %.2308 = phi i64 [ 0, %91 ], [ %132, %.thread279 ]
  %.1188307 = phi i32 [ %.0187, %91 ], [ %.2189, %.thread279 ]
  %.1193306 = phi i32 [ %.0192, %91 ], [ %.3195284, %.thread279 ]
  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 %.2308, ptr noundef %4)
  %.not251 = icmp eq i32 %.1188307, 0
  br i1 %.not251, label %97, label %102

97:                                               ; preds = %96
  %98 = load i16, ptr %11, align 2, !tbaa !25
  %99 = load i16, ptr %12, align 2, !tbaa !25
  %.not252 = icmp eq i16 %98, %99
  %100 = load i16, ptr %13, align 2
  %.not253 = icmp eq i16 %98, %100
  %or.cond = select i1 %.not252, i1 %.not253, i1 false
  br i1 %or.cond, label %102, label %101

101:                                              ; preds = %97
  store i32 1, ptr %0, align 8, !tbaa !16
  br label %102

102:                                              ; preds = %97, %101, %96
  %103 = phi i1 [ true, %96 ], [ true, %101 ], [ false, %97 ]
  %.2189 = phi i32 [ 1, %96 ], [ 1, %101 ], [ 0, %97 ]
  %.not254 = icmp eq i32 %.1193306, 0
  br i1 %.not254, label %104, label %131

104:                                              ; preds = %102
  %105 = load i16, ptr %11, align 2, !tbaa !25
  %106 = load i16, ptr %92, align 8, !tbaa !26
  %107 = icmp eq i16 %105, %106
  br i1 %107, label %108, label %116

108:                                              ; preds = %104
  %109 = load i16, ptr %12, align 2, !tbaa !25
  %110 = load i16, ptr %93, align 2, !tbaa !27
  %111 = icmp eq i16 %109, %110
  br i1 %111, label %112, label %116

112:                                              ; preds = %108
  %113 = load i16, ptr %13, align 2, !tbaa !25
  %114 = load i16, ptr %94, align 4, !tbaa !28
  %115 = icmp eq i16 %113, %114
  br label %116

116:                                              ; preds = %112, %108, %104
  %117 = phi i1 [ false, %108 ], [ false, %104 ], [ %115, %112 ]
  %118 = load i16, ptr %14, align 2, !tbaa !25
  switch i16 %118, label %.sink.split [
    i16 -1, label %128
    i16 0, label %119
  ]

119:                                              ; preds = %116
  %120 = load i32, ptr %95, align 4, !tbaa !29
  %121 = icmp eq i32 %120, 0
  %or.cond3 = select i1 %121, i1 true, i1 %117
  br i1 %or.cond3, label %122, label %.sink.split

122:                                              ; preds = %119
  %123 = load i32, ptr %42, align 8, !tbaa !15
  %124 = or i32 %123, %120
  %brmerge.not = icmp eq i32 %124, 0
  br i1 %brmerge.not, label %125, label %.thread279

125:                                              ; preds = %122
  store i32 1, ptr %95, align 4, !tbaa !29
  store i16 %105, ptr %92, align 8, !tbaa !26
  %126 = load i16, ptr %12, align 2, !tbaa !25
  store i16 %126, ptr %93, align 2, !tbaa !27
  %127 = load i16, ptr %13, align 2, !tbaa !25
  store i16 %127, ptr %94, align 4, !tbaa !28
  br label %.thread279

128:                                              ; preds = %116
  %129 = load i32, ptr %95, align 4, !tbaa !29
  %130 = icmp ne i32 %129, 0
  %or.cond5 = select i1 %130, i1 %117, i1 false
  br i1 %or.cond5, label %.sink.split, label %.thread279

.sink.split:                                      ; preds = %128, %119, %116
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %95, align 4, !tbaa !29
  br label %131

131:                                              ; preds = %.sink.split, %102
  br i1 %103, label %133, label %.thread279

.thread279:                                       ; preds = %122, %125, %128, %131
  %.3195284 = phi i32 [ 1, %131 ], [ 0, %128 ], [ 0, %125 ], [ 0, %122 ]
  %132 = add i64 %.2308, 1
  %.not250 = icmp eq i64 %132, %21
  br i1 %.not250, label %133, label %96, !llvm.loop !30

133:                                              ; preds = %131, %.thread279
  %134 = load i32, ptr %95, align 4, !tbaa !29
  %.not259 = icmp eq i32 %134, 0
  br i1 %.not259, label %.loopexit299, label %135

135:                                              ; preds = %133
  %136 = load i32, ptr %42, align 8, !tbaa !15
  %.not260 = icmp eq i32 %136, 0
  br i1 %.not260, label %.preheader298, label %.loopexit299

.preheader298:                                    ; preds = %135, %151
  %.3309 = phi i64 [ %152, %151 ], [ 0, %135 ]
  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 %.3309, ptr noundef %4)
  %137 = load i16, ptr %14, align 2, !tbaa !25
  %.not262 = icmp eq i16 %137, 0
  br i1 %.not262, label %151, label %138

138:                                              ; preds = %.preheader298
  %139 = load i16, ptr %11, align 2, !tbaa !25
  %140 = load i16, ptr %92, align 8, !tbaa !26
  %141 = icmp eq i16 %139, %140
  br i1 %141, label %142, label %151

142:                                              ; preds = %138
  %143 = load i16, ptr %12, align 2, !tbaa !25
  %144 = load i16, ptr %93, align 2, !tbaa !27
  %145 = icmp eq i16 %143, %144
  br i1 %145, label %146, label %151

146:                                              ; preds = %142
  %147 = load i16, ptr %13, align 2, !tbaa !25
  %148 = load i16, ptr %94, align 4, !tbaa !28
  %149 = icmp eq i16 %147, %148
  br i1 %149, label %150, label %151

150:                                              ; preds = %146
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %95, align 4, !tbaa !29
  br label %151

151:                                              ; preds = %.preheader298, %138, %142, %146, %150
  %152 = add i64 %.3309, 1
  %.not261 = icmp eq i64 %152, %21
  br i1 %.not261, label %.loopexit299, label %.preheader298, !llvm.loop !31

.loopexit299:                                     ; preds = %151, %135, %133
  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 %291

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

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

158:                                              ; preds = %.lr.ph316, %.thread288
  %.4315 = phi i64 [ 0, %.lr.ph316 ], [ %254, %.thread288 ]
  %.3190314 = phi i32 [ %.0187, %.lr.ph316 ], [ %.4191, %.thread288 ]
  %.4196313 = phi i32 [ %.0192, %.lr.ph316 ], [ %.6, %.thread288 ]
  %.5203312 = phi i32 [ %.2200, %.lr.ph316 ], [ %.6204293, %.thread288 ]
  %.3208.in311 = phi i1 [ %narrow296, %.lr.ph316 ], [ %167, %.thread288 ]
  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 %.4315, ptr noundef %4)
  %.pr = load i32, ptr %25, align 8, !tbaa !5
  %159 = icmp ugt i32 %.pr, 7
  %or.cond326.not = select i1 %.3208.in311, i1 true, i1 %159
  br i1 %or.cond326.not, label %thread-pre-split, label %160

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

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

thread-pre-split:                                 ; preds = %158, %160, %165
  %166 = phi i32 [ %163, %160 ], [ %162, %165 ], [ %.pr, %158 ]
  %167 = icmp uge i32 %166, %24
  %.not236 = icmp eq i32 %.3190314, 0
  br i1 %.not236, label %168, label %175

168:                                              ; preds = %thread-pre-split
  %169 = load i8, ptr %15, align 1, !tbaa !17
  %170 = load i8, ptr %16, align 1, !tbaa !17
  %.not237 = icmp eq i8 %169, %170
  %171 = load i8, ptr %17, align 1
  %.not238 = icmp eq i8 %169, %171
  %or.cond264 = select i1 %.not237, i1 %.not238, i1 false
  br i1 %or.cond264, label %175, label %172

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

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

175:                                              ; preds = %168, %172, %174, %thread-pre-split
  %176 = phi i32 [ %166, %thread-pre-split ], [ 8, %174 ], [ %166, %172 ], [ %166, %168 ]
  %177 = phi i1 [ true, %thread-pre-split ], [ true, %174 ], [ true, %172 ], [ false, %168 ]
  %.4191 = phi i32 [ 1, %thread-pre-split ], [ 1, %174 ], [ 1, %172 ], [ 0, %168 ]
  %.not239 = icmp eq i32 %.4196313, 0
  br i1 %.not239, label %178, label %.thread287

178:                                              ; preds = %175
  %179 = load i8, ptr %15, align 1, !tbaa !17
  %180 = load i16, ptr %153, align 8, !tbaa !26
  %181 = zext i8 %179 to i16
  %182 = icmp eq i16 %180, %181
  br i1 %182, label %183, label %193

183:                                              ; preds = %178
  %184 = load i8, ptr %16, align 1, !tbaa !17
  %185 = load i16, ptr %154, align 2, !tbaa !27
  %186 = zext i8 %184 to i16
  %187 = icmp eq i16 %185, %186
  br i1 %187, label %188, label %193

188:                                              ; preds = %183
  %189 = load i8, ptr %17, align 1, !tbaa !17
  %190 = load i16, ptr %155, align 4, !tbaa !28
  %191 = zext i8 %189 to i16
  %192 = icmp eq i16 %190, %191
  br label %193

193:                                              ; preds = %188, %183, %178
  %194 = phi i1 [ false, %183 ], [ false, %178 ], [ %192, %188 ]
  %195 = load i8, ptr %18, align 1, !tbaa !17
  switch i8 %195, label %199 [
    i8 -1, label %210
    i8 0, label %196
  ]

196:                                              ; preds = %193
  %197 = load i32, ptr %156, align 4, !tbaa !29
  %198 = icmp eq i32 %197, 0
  %or.cond13 = select i1 %198, i1 true, i1 %194
  br i1 %or.cond13, label %202, label %199

199:                                              ; preds = %193, %196
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %156, align 4, !tbaa !29
  %200 = icmp ult i32 %176, 8
  br i1 %200, label %201, label %.thread287

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

202:                                              ; preds = %196
  %203 = load i32, ptr %42, align 8, !tbaa !15
  %204 = or i32 %203, %197
  %brmerge325.not = icmp eq i32 %204, 0
  br i1 %brmerge325.not, label %205, label %.thread287

205:                                              ; preds = %202
  store i32 1, ptr %156, align 4, !tbaa !29
  store i16 %181, ptr %153, align 8, !tbaa !26
  %206 = load i8, ptr %16, align 1, !tbaa !17
  %207 = zext i8 %206 to i16
  store i16 %207, ptr %154, align 2, !tbaa !27
  %208 = load i8, ptr %17, align 1, !tbaa !17
  %209 = zext i8 %208 to i16
  store i16 %209, ptr %155, align 4, !tbaa !28
  br label %.thread287

210:                                              ; preds = %193
  %211 = load i32, ptr %156, align 4, !tbaa !29
  %212 = icmp ne i32 %211, 0
  %or.cond15 = select i1 %212, i1 %194, i1 false
  br i1 %or.cond15, label %213, label %.thread287

213:                                              ; preds = %210
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %156, align 4, !tbaa !29
  %214 = icmp ult i32 %176, 8
  br i1 %214, label %215, label %.thread287

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

.thread287:                                       ; preds = %202, %201, %199, %210, %215, %213, %205, %175
  %216 = phi i1 [ true, %175 ], [ true, %201 ], [ true, %199 ], [ true, %215 ], [ true, %213 ], [ false, %210 ], [ false, %205 ], [ false, %202 ]
  %.6 = phi i32 [ 1, %175 ], [ 1, %201 ], [ 1, %199 ], [ 1, %215 ], [ 1, %213 ], [ 0, %210 ], [ 0, %205 ], [ 0, %202 ]
  %.not244 = icmp eq i32 %.5203312, 0
  br i1 %.not244, label %217, label %252

217:                                              ; preds = %.thread287
  %218 = load i8, ptr %15, align 1, !tbaa !17
  %219 = load i8, ptr %16, align 1, !tbaa !17
  %220 = load i8, ptr %17, align 1, !tbaa !17
  %221 = load i8, ptr %18, align 1, !tbaa !17
  %222 = call noundef i32 @_ZL14color_tree_hasP9ColorTreehhhh(ptr noundef nonnull %6, i8 noundef zeroext %218, i8 noundef zeroext %219, i8 noundef zeroext %220, i8 noundef zeroext %221)
  %.not245 = icmp eq i32 %222, 0
  br i1 %.not245, label %223, label %.thread288

223:                                              ; preds = %217
  %224 = load i8, ptr %15, align 1, !tbaa !17
  %225 = load i8, ptr %16, align 1, !tbaa !17
  %226 = load i8, ptr %17, align 1, !tbaa !17
  %227 = load i8, ptr %18, align 1, !tbaa !17
  %228 = load i32, ptr %48, align 4, !tbaa !12
  call void @_ZL14color_tree_addP9ColorTreehhhhj(ptr noundef nonnull %6, i8 noundef zeroext %224, i8 noundef zeroext %225, i8 noundef zeroext %226, i8 noundef zeroext %227, i32 noundef %228)
  %229 = load i32, ptr %48, align 4, !tbaa !12
  %230 = icmp ult i32 %229, 256
  br i1 %230, label %231, label %248

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

248:                                              ; preds = %231, %223
  %249 = add i32 %229, 1
  store i32 %249, ptr %48, align 4, !tbaa !12
  %250 = icmp uge i32 %249, %.0211
  %251 = zext i1 %250 to i32
  br label %252

252:                                              ; preds = %248, %.thread287
  %.6204 = phi i32 [ 1, %.thread287 ], [ %251, %248 ]
  %253 = icmp ne i32 %.6204, 0
  %or.cond17 = select i1 %216, i1 %253, i1 false
  %or.cond19 = and i1 %177, %or.cond17
  %or.cond21 = select i1 %or.cond19, i1 %167, i1 false
  br i1 %or.cond21, label %._crit_edge, label %.thread288

.thread288:                                       ; preds = %217, %252
  %.6204293 = phi i32 [ %.6204, %252 ], [ 0, %217 ]
  %254 = add nuw i64 %.4315, 1
  %.not234 = icmp eq i64 %254, %21
  br i1 %.not234, label %._crit_edge, label %158, !llvm.loop !32

._crit_edge:                                      ; preds = %.thread288, %252, %.thread
  %255 = getelementptr inbounds i8, ptr %0, i64 4
  %256 = load i32, ptr %255, align 4, !tbaa !29
  %.not246 = icmp eq i32 %256, 0
  br i1 %.not246, label %.loopexit, label %257

257:                                              ; preds = %._crit_edge
  %258 = load i32, ptr %42, align 8, !tbaa !15
  %.not247 = icmp ne i32 %258, 0
  %or.cond321 = or i1 %.not247, %.not234310
  br i1 %or.cond321, label %.loopexit, label %.lr.ph320

.lr.ph320:                                        ; preds = %257
  %259 = getelementptr inbounds i8, ptr %0, i64 8
  %260 = getelementptr inbounds i8, ptr %0, i64 10
  %261 = getelementptr inbounds i8, ptr %0, i64 12
  br label %262

262:                                              ; preds = %.lr.ph320, %283
  %.5319 = phi i64 [ 0, %.lr.ph320 ], [ %284, %283 ]
  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 %.5319, ptr noundef %4)
  %263 = load i8, ptr %18, align 1, !tbaa !17
  %.not249 = icmp eq i8 %263, 0
  br i1 %.not249, label %283, label %264

264:                                              ; preds = %262
  %265 = load i8, ptr %15, align 1, !tbaa !17
  %266 = load i16, ptr %259, align 8, !tbaa !26
  %267 = zext i8 %265 to i16
  %268 = icmp eq i16 %266, %267
  br i1 %268, label %269, label %283

269:                                              ; preds = %264
  %270 = load i8, ptr %16, align 1, !tbaa !17
  %271 = load i16, ptr %260, align 2, !tbaa !27
  %272 = zext i8 %270 to i16
  %273 = icmp eq i16 %271, %272
  br i1 %273, label %274, label %283

274:                                              ; preds = %269
  %275 = load i8, ptr %17, align 1, !tbaa !17
  %276 = load i16, ptr %261, align 4, !tbaa !28
  %277 = zext i8 %275 to i16
  %278 = icmp eq i16 %276, %277
  br i1 %278, label %279, label %283

279:                                              ; preds = %274
  store i32 1, ptr %42, align 8, !tbaa !15
  store i32 0, ptr %255, align 4, !tbaa !29
  %280 = load i32, ptr %25, align 8, !tbaa !5
  %281 = icmp ult i32 %280, 8
  br i1 %281, label %282, label %283

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

283:                                              ; preds = %262, %264, %269, %274, %282, %279
  %284 = add nuw i64 %.5319, 1
  %.not248 = icmp eq i64 %284, %21
  br i1 %.not248, label %.loopexit, label %262, !llvm.loop !33

.loopexit:                                        ; preds = %283, %257, %._crit_edge
  %285 = getelementptr inbounds i8, ptr %0, i64 8
  %286 = load <2 x i16>, ptr %285, align 8, !tbaa !25
  %287 = mul <2 x i16> %286, <i16 257, i16 257>
  store <2 x i16> %287, ptr %285, align 8, !tbaa !25
  %288 = getelementptr inbounds i8, ptr %0, i64 12
  %289 = load i16, ptr %288, align 4, !tbaa !28
  %290 = mul i16 %289, 257
  store i16 %290, ptr %288, align 4, !tbaa !28
  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 %291

291:                                              ; preds = %.loopexit, %.loopexit299
  call void @_ZL18color_tree_cleanupP9ColorTree(ptr noundef nonnull %6)
  call void @llvm.lifetime.end.p0(i64 136, ptr nonnull %6) #4
  ret void
}

; 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 = !{!8, !8, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!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 = distinct !{!24, !19}
!25 = !{!10, !10, i64 0}
!26 = !{!6, !10, i64 8}
!27 = !{!6, !10, i64 10}
!28 = !{!6, !10, i64 12}
!29 = !{!6, !7, i64 4}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}


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