; LLVM IR from facebookresearch/habitat-sim :: src/deps/basis-universal/encoder/basisu_enc.ll (ZN6basisu8read_tgaEPKhjRiS2_S2_)

; 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"

%"class.basisu::color_rgba" = type { %union.anon }
%union.anon = type { [4 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.basisu::tga_header" = type { i8, i8, i8, %"struct.basisu::packed_uint", %"struct.basisu::packed_uint", i8, %"struct.basisu::packed_uint", %"struct.basisu::packed_uint", %"struct.basisu::packed_uint", %"struct.basisu::packed_uint", i8, i8 }
%"struct.basisu::packed_uint" = type { [2 x i8] }
%struct.anon = type { i8, i8, i8, i8 }

@.str.4 = external hidden unnamed_addr constant [110 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [59 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_ = external hidden unnamed_addr constant [74 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [13 x i8], align 1

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #3 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN6basisu7minimumIjEET_S1_S1_(i32 noundef, i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN6basisu8read_tgaEPKhjRiS2_S2_(ptr noundef %0, i32 noundef %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4) #6 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca [256 x %"class.basisu::color_rgba"], align 16
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca %"class.std::vector", align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca [4 x i8], align 1
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i8, align 1
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  %63 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 0, ptr %63, align 4, !tbaa !9
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 0, ptr %64, align 4, !tbaa !9
  %65 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 0, ptr %65, align 4, !tbaa !9
  %66 = load i32, ptr %8, align 4, !tbaa !9
  %67 = zext i32 %66 to i64
  %68 = icmp ule i64 %67, 18
  br i1 %68, label %69, label %70

69:                                               ; preds = %5
  store ptr null, ptr %6, align 8
  br label %1297

70:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %71, ptr %12, align 8, !tbaa !5
  %72 = load ptr, ptr %12, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.basisu::tga_header", ptr %72, i32 0, i32 8
  %74 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %73)
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %76, label %91

76:                                               ; preds = %70
  %77 = load ptr, ptr %12, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.basisu::tga_header", ptr %77, i32 0, i32 9
  %79 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %78)
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %91

81:                                               ; preds = %76
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.basisu::tga_header", ptr %82, i32 0, i32 8
  %84 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %83)
  %85 = icmp ugt i32 %84, 16384
  br i1 %85, label %91, label %86

86:                                               ; preds = %81
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.basisu::tga_header", ptr %87, i32 0, i32 9
  %89 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %88)
  %90 = icmp ugt i32 %89, 16384
  br i1 %90, label %91, label %92

91:                                               ; preds = %86, %81, %76, %70
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1296

92:                                               ; preds = %86
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = getelementptr inbounds %"struct.basisu::tga_header", ptr %93, i32 0, i32 11
  %95 = load i8, ptr %94, align 1, !tbaa !11
  %96 = zext i8 %95 to i32
  %97 = ashr i32 %96, 6
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %92
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1296

100:                                              ; preds = %92
  %101 = load ptr, ptr %12, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.basisu::tga_header", ptr %101, i32 0, i32 1
  %103 = load i8, ptr %102, align 1, !tbaa !14
  %104 = zext i8 %103 to i32
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %113

106:                                              ; preds = %100
  %107 = load ptr, ptr %12, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.basisu::tga_header", ptr %107, i32 0, i32 1
  %109 = load i8, ptr %108, align 1, !tbaa !14
  %110 = zext i8 %109 to i32
  %111 = icmp ne i32 %110, 1
  br i1 %111, label %112, label %113

112:                                              ; preds = %106
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1296

113:                                              ; preds = %106, %100
  %114 = load ptr, ptr %12, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.basisu::tga_header", ptr %114, i32 0, i32 1
  %116 = load i8, ptr %115, align 1, !tbaa !14
  %117 = icmp ne i8 %116, 0
  br i1 %117, label %118, label %138

118:                                              ; preds = %113
  %119 = load ptr, ptr %12, align 8, !tbaa !5
  %120 = getelementptr inbounds %"struct.basisu::tga_header", ptr %119, i32 0, i32 5
  %121 = load i8, ptr %120, align 1, !tbaa !15
  %122 = zext i8 %121 to i32
  %123 = icmp eq i32 %122, 0
  br i1 %123, label %130, label %124

124:                                              ; preds = %118
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.basisu::tga_header", ptr %125, i32 0, i32 5
  %127 = load i8, ptr %126, align 1, !tbaa !15
  %128 = zext i8 %127 to i32
  %129 = icmp sgt i32 %128, 32
  br i1 %129, label %130, label %131

130:                                              ; preds = %124, %118
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1296

131:                                              ; preds = %124
  %132 = load ptr, ptr %12, align 8, !tbaa !5
  %133 = getelementptr inbounds %"struct.basisu::tga_header", ptr %132, i32 0, i32 3
  %134 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %133)
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %137

136:                                              ; preds = %131
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1296

137:                                              ; preds = %131
  br label %138

138:                                              ; preds = %137, %113
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #10
  %139 = load ptr, ptr %12, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.basisu::tga_header", ptr %139, i32 0, i32 11
  %141 = load i8, ptr %140, align 1, !tbaa !11
  %142 = zext i8 %141 to i32
  %143 = and i32 %142, 16
  %144 = icmp ne i32 %143, 0
  %145 = zext i1 %144 to i8
  store i8 %145, ptr %14, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #10
  %146 = load ptr, ptr %12, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.basisu::tga_header", ptr %146, i32 0, i32 11
  %148 = load i8, ptr %147, align 1, !tbaa !11
  %149 = zext i8 %148 to i32
  %150 = and i32 %149, 32
  %151 = icmp eq i32 %150, 0
  %152 = zext i1 %151 to i8
  store i8 %152, ptr %15, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #10
  store i8 0, ptr %16, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  %153 = load ptr, ptr %12, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.basisu::tga_header", ptr %153, i32 0, i32 2
  %155 = load i8, ptr %154, align 1, !tbaa !18
  %156 = zext i8 %155 to i32
  store i32 %156, ptr %17, align 4, !tbaa !9
  %157 = load i32, ptr %17, align 4, !tbaa !9
  %158 = icmp sgt i32 %157, 8
  br i1 %158, label %159, label %162

159:                                              ; preds = %138
  %160 = load i32, ptr %17, align 4, !tbaa !9
  %161 = sub nsw i32 %160, 8
  store i32 %161, ptr %17, align 4, !tbaa !9
  store i8 1, ptr %16, align 1, !tbaa !16
  br label %162

162:                                              ; preds = %159, %138
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  %163 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %163, ptr %18, align 4, !tbaa !19
  %164 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %164, label %218 [
    i32 2, label %165
    i32 1, label %173
    i32 3, label %192
  ]

165:                                              ; preds = %162
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.basisu::tga_header", ptr %166, i32 0, i32 10
  %168 = load i8, ptr %167, align 1, !tbaa !21
  %169 = zext i8 %168 to i32
  %170 = icmp eq i32 %169, 8
  br i1 %170, label %171, label %172

171:                                              ; preds = %165
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1295

172:                                              ; preds = %165
  br label %219

173:                                              ; preds = %162
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.basisu::tga_header", ptr %174, i32 0, i32 10
  %176 = load i8, ptr %175, align 1, !tbaa !21
  %177 = zext i8 %176 to i32
  %178 = icmp ne i32 %177, 8
  br i1 %178, label %190, label %179

179:                                              ; preds = %173
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.basisu::tga_header", ptr %180, i32 0, i32 1
  %182 = load i8, ptr %181, align 1, !tbaa !14
  %183 = zext i8 %182 to i32
  %184 = icmp ne i32 %183, 1
  br i1 %184, label %190, label %185

185:                                              ; preds = %179
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.basisu::tga_header", ptr %186, i32 0, i32 4
  %188 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %187)
  %189 = icmp eq i32 %188, 0
  br i1 %189, label %190, label %191

190:                                              ; preds = %185, %179, %173
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1295

191:                                              ; preds = %185
  br label %219

192:                                              ; preds = %162
  %193 = load ptr, ptr %12, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.basisu::tga_header", ptr %193, i32 0, i32 1
  %195 = load i8, ptr %194, align 1, !tbaa !14
  %196 = zext i8 %195 to i32
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %203, label %198

198:                                              ; preds = %192
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.basisu::tga_header", ptr %199, i32 0, i32 4
  %201 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %200)
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %204

203:                                              ; preds = %198, %192
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1295

204:                                              ; preds = %198
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.basisu::tga_header", ptr %205, i32 0, i32 10
  %207 = load i8, ptr %206, align 1, !tbaa !21
  %208 = zext i8 %207 to i32
  %209 = icmp ne i32 %208, 8
  br i1 %209, label %210, label %217

210:                                              ; preds = %204
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds %"struct.basisu::tga_header", ptr %211, i32 0, i32 10
  %213 = load i8, ptr %212, align 1, !tbaa !21
  %214 = zext i8 %213 to i32
  %215 = icmp ne i32 %214, 16
  br i1 %215, label %216, label %217

216:                                              ; preds = %210
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1295

217:                                              ; preds = %210, %204
  br label %219

218:                                              ; preds = %162
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1295

219:                                              ; preds = %217, %191, %172
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  store i32 0, ptr %19, align 4, !tbaa !9
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.basisu::tga_header", ptr %220, i32 0, i32 10
  %222 = load i8, ptr %221, align 1, !tbaa !21
  %223 = zext i8 %222 to i32
  switch i32 %223, label %256 [
    i32 32, label %224
    i32 24, label %226
    i32 16, label %228
    i32 15, label %228
    i32 8, label %242
  ]

224:                                              ; preds = %219
  store i32 4, ptr %19, align 4, !tbaa !9
  %225 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 4, ptr %225, align 4, !tbaa !9
  br label %257

226:                                              ; preds = %219
  store i32 3, ptr %19, align 4, !tbaa !9
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 3, ptr %227, align 4, !tbaa !9
  br label %257

228:                                              ; preds = %219, %219
  store i32 2, ptr %19, align 4, !tbaa !9
  %229 = load i32, ptr %17, align 4, !tbaa !9
  %230 = icmp eq i32 %229, 3
  br i1 %230, label %231, label %237

231:                                              ; preds = %228
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.basisu::tga_header", ptr %232, i32 0, i32 10
  %234 = load i8, ptr %233, align 1, !tbaa !21
  %235 = zext i8 %234 to i32
  %236 = icmp eq i32 %235, 16
  br label %237

237:                                              ; preds = %231, %228
  %238 = phi i1 [ false, %228 ], [ %236, %231 ]
  %239 = zext i1 %238 to i64
  %240 = select i1 %238, i32 4, i32 3
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %240, ptr %241, align 4, !tbaa !9
  br label %257

242:                                              ; preds = %219
  store i32 1, ptr %19, align 4, !tbaa !9
  %243 = load i32, ptr %17, align 4, !tbaa !9
  %244 = icmp eq i32 %243, 1
  br i1 %244, label %245, label %251

245:                                              ; preds = %242
  %246 = load ptr, ptr %12, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.basisu::tga_header", ptr %246, i32 0, i32 5
  %248 = load i8, ptr %247, align 1, !tbaa !15
  %249 = zext i8 %248 to i32
  %250 = icmp eq i32 %249, 32
  br label %251

251:                                              ; preds = %245, %242
  %252 = phi i1 [ false, %242 ], [ %250, %245 ]
  %253 = zext i1 %252 to i64
  %254 = select i1 %252, i32 4, i32 3
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %254, ptr %255, align 4, !tbaa !9
  br label %257

256:                                              ; preds = %219
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1294

257:                                              ; preds = %251, %237, %226, %224
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %258 = load ptr, ptr %7, align 8, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %258, i64 18
  store ptr %259, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = zext i32 %260 to i64
  %262 = sub i64 %261, 18
  %263 = trunc i64 %262 to i32
  store i32 %263, ptr %21, align 4, !tbaa !9
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.basisu::tga_header", ptr %264, i32 0, i32 0
  %266 = load i8, ptr %265, align 1, !tbaa !22
  %267 = icmp ne i8 %266, 0
  br i1 %267, label %268, label %290

268:                                              ; preds = %257
  %269 = load i32, ptr %21, align 4, !tbaa !9
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.basisu::tga_header", ptr %270, i32 0, i32 0
  %272 = load i8, ptr %271, align 1, !tbaa !22
  %273 = zext i8 %272 to i32
  %274 = icmp ult i32 %269, %273
  br i1 %274, label %275, label %276

275:                                              ; preds = %268
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1293

276:                                              ; preds = %268
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds %"struct.basisu::tga_header", ptr %277, i32 0, i32 0
  %279 = load i8, ptr %278, align 1, !tbaa !22
  %280 = zext i8 %279 to i32
  %281 = load ptr, ptr %20, align 8, !tbaa !5
  %282 = sext i32 %280 to i64
  %283 = getelementptr inbounds i8, ptr %281, i64 %282
  store ptr %283, ptr %20, align 8, !tbaa !5
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.basisu::tga_header", ptr %284, i32 0, i32 0
  %286 = load i8, ptr %285, align 1, !tbaa !22
  %287 = zext i8 %286 to i32
  %288 = load i32, ptr %21, align 4, !tbaa !9
  %289 = add i32 %288, %287
  store i32 %289, ptr %21, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %276, %257
  call void @llvm.lifetime.start.p0(i64 1024, ptr %22) #10
  %291 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i32 0, i32 0
  %292 = getelementptr inbounds %"class.basisu::color_rgba", ptr %291, i64 256
  br label %293

293:                                              ; preds = %293, %290
  %294 = phi ptr [ %291, %290 ], [ %295, %293 ]
  call void @_ZN6basisu10color_rgbaC2Ev(ptr noundef nonnull align 1 dereferenceable(4) %294)
  %295 = getelementptr inbounds %"class.basisu::color_rgba", ptr %294, i64 1
  %296 = icmp eq ptr %295, %292
  br i1 %296, label %297, label %293

297:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %298

298:                                              ; preds = %307, %297
  %299 = load i32, ptr %23, align 4, !tbaa !9
  %300 = icmp ult i32 %299, 256
  br i1 %300, label %302, label %301

301:                                              ; preds = %298
  store i32 4, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %310

302:                                              ; preds = %298
  %303 = load i32, ptr %23, align 4, !tbaa !9
  %304 = zext i32 %303 to i64
  %305 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %304
  %306 = call noundef nonnull align 1 dereferenceable(4) ptr @_ZN6basisu10color_rgba3setEiiii(ptr noundef nonnull align 1 dereferenceable(4) %305, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 255)
  br label %307

307:                                              ; preds = %302
  %308 = load i32, ptr %23, align 4, !tbaa !9
  %309 = add i32 %308, 1
  store i32 %309, ptr %23, align 4, !tbaa !9
  br label %298, !llvm.loop !23

310:                                              ; preds = %301
  %311 = load ptr, ptr %12, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.basisu::tga_header", ptr %311, i32 0, i32 1
  %313 = load i8, ptr %312, align 1, !tbaa !14
  %314 = icmp ne i8 %313, 0
  br i1 %314, label %315, label %636

315:                                              ; preds = %310
  %316 = load ptr, ptr %12, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.basisu::tga_header", ptr %316, i32 0, i32 4
  %318 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %317)
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %636

320:                                              ; preds = %315
  %321 = load i32, ptr %18, align 4, !tbaa !19
  %322 = icmp eq i32 %321, 1
  br i1 %322, label %323, label %610

323:                                              ; preds = %320
  %324 = load ptr, ptr %12, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.basisu::tga_header", ptr %324, i32 0, i32 5
  %326 = load i8, ptr %325, align 1, !tbaa !15
  %327 = zext i8 %326 to i32
  %328 = icmp ne i32 %327, 32
  br i1 %328, label %329, label %347

329:                                              ; preds = %323
  %330 = load ptr, ptr %12, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.basisu::tga_header", ptr %330, i32 0, i32 5
  %332 = load i8, ptr %331, align 1, !tbaa !15
  %333 = zext i8 %332 to i32
  %334 = icmp ne i32 %333, 24
  br i1 %334, label %335, label %347

335:                                              ; preds = %329
  %336 = load ptr, ptr %12, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.basisu::tga_header", ptr %336, i32 0, i32 5
  %338 = load i8, ptr %337, align 1, !tbaa !15
  %339 = zext i8 %338 to i32
  %340 = icmp ne i32 %339, 15
  br i1 %340, label %341, label %347

341:                                              ; preds = %335
  %342 = load ptr, ptr %12, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.basisu::tga_header", ptr %342, i32 0, i32 5
  %344 = load i8, ptr %343, align 1, !tbaa !15
  %345 = zext i8 %344 to i32
  %346 = icmp ne i32 %345, 16
  br i1 %346, label %352, label %347

347:                                              ; preds = %341, %335, %329, %323
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.basisu::tga_header", ptr %348, i32 0, i32 4
  %350 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %349)
  %351 = icmp ugt i32 %350, 256
  br i1 %351, label %352, label %353

352:                                              ; preds = %347, %341
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1292

353:                                              ; preds = %347
  %354 = load ptr, ptr %12, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.basisu::tga_header", ptr %354, i32 0, i32 5
  %356 = load i8, ptr %355, align 1, !tbaa !15
  %357 = zext i8 %356 to i32
  %358 = icmp eq i32 %357, 32
  br i1 %358, label %359, label %439

359:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.basisu::tga_header", ptr %360, i32 0, i32 4
  %362 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %361)
  %363 = mul i32 %362, 4
  store i32 %363, ptr %24, align 4, !tbaa !9
  %364 = load i32, ptr %21, align 4, !tbaa !9
  %365 = load i32, ptr %24, align 4, !tbaa !9
  %366 = icmp ult i32 %364, %365
  br i1 %366, label %367, label %368

367:                                              ; preds = %359
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %436

368:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %425, %368
  %370 = load i32, ptr %25, align 4, !tbaa !9
  %371 = load ptr, ptr %12, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.basisu::tga_header", ptr %371, i32 0, i32 4
  %373 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %372)
  %374 = icmp ult i32 %370, %373
  br i1 %374, label %376, label %375

375:                                              ; preds = %369
  store i32 7, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %428

376:                                              ; preds = %369
  %377 = load ptr, ptr %20, align 8, !tbaa !5
  %378 = load i32, ptr %25, align 4, !tbaa !9
  %379 = mul i32 %378, 4
  %380 = add i32 %379, 2
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds i8, ptr %377, i64 %381
  %383 = load i8, ptr %382, align 1, !tbaa !25
  %384 = load i32, ptr %25, align 4, !tbaa !9
  %385 = zext i32 %384 to i64
  %386 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %385
  %387 = getelementptr inbounds %"class.basisu::color_rgba", ptr %386, i32 0, i32 0
  %388 = getelementptr inbounds %struct.anon, ptr %387, i32 0, i32 0
  store i8 %383, ptr %388, align 4, !tbaa !25
  %389 = load ptr, ptr %20, align 8, !tbaa !5
  %390 = load i32, ptr %25, align 4, !tbaa !9
  %391 = mul i32 %390, 4
  %392 = add i32 %391, 1
  %393 = zext i32 %392 to i64
  %394 = getelementptr inbounds i8, ptr %389, i64 %393
  %395 = load i8, ptr %394, align 1, !tbaa !25
  %396 = load i32, ptr %25, align 4, !tbaa !9
  %397 = zext i32 %396 to i64
  %398 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %397
  %399 = getelementptr inbounds %"class.basisu::color_rgba", ptr %398, i32 0, i32 0
  %400 = getelementptr inbounds %struct.anon, ptr %399, i32 0, i32 1
  store i8 %395, ptr %400, align 1, !tbaa !25
  %401 = load ptr, ptr %20, align 8, !tbaa !5
  %402 = load i32, ptr %25, align 4, !tbaa !9
  %403 = mul i32 %402, 4
  %404 = add i32 %403, 0
  %405 = zext i32 %404 to i64
  %406 = getelementptr inbounds i8, ptr %401, i64 %405
  %407 = load i8, ptr %406, align 1, !tbaa !25
  %408 = load i32, ptr %25, align 4, !tbaa !9
  %409 = zext i32 %408 to i64
  %410 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %409
  %411 = getelementptr inbounds %"class.basisu::color_rgba", ptr %410, i32 0, i32 0
  %412 = getelementptr inbounds %struct.anon, ptr %411, i32 0, i32 2
  store i8 %407, ptr %412, align 2, !tbaa !25
  %413 = load ptr, ptr %20, align 8, !tbaa !5
  %414 = load i32, ptr %25, align 4, !tbaa !9
  %415 = mul i32 %414, 4
  %416 = add i32 %415, 3
  %417 = zext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %413, i64 %417
  %419 = load i8, ptr %418, align 1, !tbaa !25
  %420 = load i32, ptr %25, align 4, !tbaa !9
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %421
  %423 = getelementptr inbounds %"class.basisu::color_rgba", ptr %422, i32 0, i32 0
  %424 = getelementptr inbounds %struct.anon, ptr %423, i32 0, i32 3
  store i8 %419, ptr %424, align 1, !tbaa !25
  br label %425

425:                                              ; preds = %376
  %426 = load i32, ptr %25, align 4, !tbaa !9
  %427 = add i32 %426, 1
  store i32 %427, ptr %25, align 4, !tbaa !9
  br label %369, !llvm.loop !26

428:                                              ; preds = %375
  %429 = load i32, ptr %24, align 4, !tbaa !9
  %430 = load i32, ptr %21, align 4, !tbaa !9
  %431 = sub i32 %430, %429
  store i32 %431, ptr %21, align 4, !tbaa !9
  %432 = load i32, ptr %24, align 4, !tbaa !9
  %433 = load ptr, ptr %20, align 8, !tbaa !5
  %434 = zext i32 %432 to i64
  %435 = getelementptr inbounds i8, ptr %433, i64 %434
  store ptr %435, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %13, align 4
  br label %436

436:                                              ; preds = %428, %367
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  %437 = load i32, ptr %13, align 4
  switch i32 %437, label %1292 [
    i32 0, label %438
  ]

438:                                              ; preds = %436
  br label %609

439:                                              ; preds = %353
  %440 = load ptr, ptr %12, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.basisu::tga_header", ptr %440, i32 0, i32 5
  %442 = load i8, ptr %441, align 1, !tbaa !15
  %443 = zext i8 %442 to i32
  %444 = icmp eq i32 %443, 24
  br i1 %444, label %445, label %518

445:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  %446 = load ptr, ptr %12, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.basisu::tga_header", ptr %446, i32 0, i32 4
  %448 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %447)
  %449 = mul i32 %448, 3
  store i32 %449, ptr %26, align 4, !tbaa !9
  %450 = load i32, ptr %21, align 4, !tbaa !9
  %451 = load i32, ptr %26, align 4, !tbaa !9
  %452 = icmp ult i32 %450, %451
  br i1 %452, label %453, label %454

453:                                              ; preds = %445
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %515

454:                                              ; preds = %445
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %504, %454
  %456 = load i32, ptr %27, align 4, !tbaa !9
  %457 = load ptr, ptr %12, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.basisu::tga_header", ptr %457, i32 0, i32 4
  %459 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %458)
  %460 = icmp ult i32 %456, %459
  br i1 %460, label %462, label %461

461:                                              ; preds = %455
  store i32 10, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  br label %507

462:                                              ; preds = %455
  %463 = load ptr, ptr %20, align 8, !tbaa !5
  %464 = load i32, ptr %27, align 4, !tbaa !9
  %465 = mul i32 %464, 3
  %466 = add i32 %465, 2
  %467 = zext i32 %466 to i64
  %468 = getelementptr inbounds i8, ptr %463, i64 %467
  %469 = load i8, ptr %468, align 1, !tbaa !25
  %470 = load i32, ptr %27, align 4, !tbaa !9
  %471 = zext i32 %470 to i64
  %472 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %471
  %473 = getelementptr inbounds %"class.basisu::color_rgba", ptr %472, i32 0, i32 0
  %474 = getelementptr inbounds %struct.anon, ptr %473, i32 0, i32 0
  store i8 %469, ptr %474, align 4, !tbaa !25
  %475 = load ptr, ptr %20, align 8, !tbaa !5
  %476 = load i32, ptr %27, align 4, !tbaa !9
  %477 = mul i32 %476, 3
  %478 = add i32 %477, 1
  %479 = zext i32 %478 to i64
  %480 = getelementptr inbounds i8, ptr %475, i64 %479
  %481 = load i8, ptr %480, align 1, !tbaa !25
  %482 = load i32, ptr %27, align 4, !tbaa !9
  %483 = zext i32 %482 to i64
  %484 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %483
  %485 = getelementptr inbounds %"class.basisu::color_rgba", ptr %484, i32 0, i32 0
  %486 = getelementptr inbounds %struct.anon, ptr %485, i32 0, i32 1
  store i8 %481, ptr %486, align 1, !tbaa !25
  %487 = load ptr, ptr %20, align 8, !tbaa !5
  %488 = load i32, ptr %27, align 4, !tbaa !9
  %489 = mul i32 %488, 3
  %490 = add i32 %489, 0
  %491 = zext i32 %490 to i64
  %492 = getelementptr inbounds i8, ptr %487, i64 %491
  %493 = load i8, ptr %492, align 1, !tbaa !25
  %494 = load i32, ptr %27, align 4, !tbaa !9
  %495 = zext i32 %494 to i64
  %496 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %495
  %497 = getelementptr inbounds %"class.basisu::color_rgba", ptr %496, i32 0, i32 0
  %498 = getelementptr inbounds %struct.anon, ptr %497, i32 0, i32 2
  store i8 %493, ptr %498, align 2, !tbaa !25
  %499 = load i32, ptr %27, align 4, !tbaa !9
  %500 = zext i32 %499 to i64
  %501 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %500
  %502 = getelementptr inbounds %"class.basisu::color_rgba", ptr %501, i32 0, i32 0
  %503 = getelementptr inbounds %struct.anon, ptr %502, i32 0, i32 3
  store i8 -1, ptr %503, align 1, !tbaa !25
  br label %504

504:                                              ; preds = %462
  %505 = load i32, ptr %27, align 4, !tbaa !9
  %506 = add i32 %505, 1
  store i32 %506, ptr %27, align 4, !tbaa !9
  br label %455, !llvm.loop !27

507:                                              ; preds = %461
  %508 = load i32, ptr %26, align 4, !tbaa !9
  %509 = load i32, ptr %21, align 4, !tbaa !9
  %510 = sub i32 %509, %508
  store i32 %510, ptr %21, align 4, !tbaa !9
  %511 = load i32, ptr %26, align 4, !tbaa !9
  %512 = load ptr, ptr %20, align 8, !tbaa !5
  %513 = zext i32 %511 to i64
  %514 = getelementptr inbounds i8, ptr %512, i64 %513
  store ptr %514, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %13, align 4
  br label %515

515:                                              ; preds = %507, %453
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  %516 = load i32, ptr %13, align 4
  switch i32 %516, label %1292 [
    i32 0, label %517
  ]

517:                                              ; preds = %515
  br label %608

518:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  %519 = load ptr, ptr %12, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.basisu::tga_header", ptr %519, i32 0, i32 4
  %521 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %520)
  %522 = mul i32 %521, 2
  store i32 %522, ptr %28, align 4, !tbaa !9
  %523 = load i32, ptr %21, align 4, !tbaa !9
  %524 = load i32, ptr %28, align 4, !tbaa !9
  %525 = icmp ult i32 %523, %524
  br i1 %525, label %526, label %527

526:                                              ; preds = %518
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %605

527:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %528

528:                                              ; preds = %594, %527
  %529 = load i32, ptr %29, align 4, !tbaa !9
  %530 = load ptr, ptr %12, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.basisu::tga_header", ptr %530, i32 0, i32 4
  %532 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %531)
  %533 = icmp ult i32 %529, %532
  br i1 %533, label %535, label %534

534:                                              ; preds = %528
  store i32 13, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  br label %597

535:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  %536 = load ptr, ptr %20, align 8, !tbaa !5
  %537 = load i32, ptr %29, align 4, !tbaa !9
  %538 = mul i32 %537, 2
  %539 = add i32 %538, 0
  %540 = zext i32 %539 to i64
  %541 = getelementptr inbounds i8, ptr %536, i64 %540
  %542 = load i8, ptr %541, align 1, !tbaa !25
  %543 = zext i8 %542 to i32
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = load i32, ptr %29, align 4, !tbaa !9
  %546 = mul i32 %545, 2
  %547 = add i32 %546, 1
  %548 = zext i32 %547 to i64
  %549 = getelementptr inbounds i8, ptr %544, i64 %548
  %550 = load i8, ptr %549, align 1, !tbaa !25
  %551 = zext i8 %550 to i32
  %552 = shl i32 %551, 8
  %553 = or i32 %543, %552
  store i32 %553, ptr %30, align 4, !tbaa !9
  %554 = load i32, ptr %30, align 4, !tbaa !9
  %555 = lshr i32 %554, 10
  %556 = and i32 %555, 31
  %557 = mul i32 %556, 255
  %558 = add i32 %557, 15
  %559 = udiv i32 %558, 31
  %560 = trunc i32 %559 to i8
  %561 = load i32, ptr %29, align 4, !tbaa !9
  %562 = zext i32 %561 to i64
  %563 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %562
  %564 = getelementptr inbounds %"class.basisu::color_rgba", ptr %563, i32 0, i32 0
  %565 = getelementptr inbounds %struct.anon, ptr %564, i32 0, i32 0
  store i8 %560, ptr %565, align 4, !tbaa !25
  %566 = load i32, ptr %30, align 4, !tbaa !9
  %567 = lshr i32 %566, 5
  %568 = and i32 %567, 31
  %569 = mul i32 %568, 255
  %570 = add i32 %569, 15
  %571 = udiv i32 %570, 31
  %572 = trunc i32 %571 to i8
  %573 = load i32, ptr %29, align 4, !tbaa !9
  %574 = zext i32 %573 to i64
  %575 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %574
  %576 = getelementptr inbounds %"class.basisu::color_rgba", ptr %575, i32 0, i32 0
  %577 = getelementptr inbounds %struct.anon, ptr %576, i32 0, i32 1
  store i8 %572, ptr %577, align 1, !tbaa !25
  %578 = load i32, ptr %30, align 4, !tbaa !9
  %579 = and i32 %578, 31
  %580 = mul i32 %579, 255
  %581 = add i32 %580, 15
  %582 = udiv i32 %581, 31
  %583 = trunc i32 %582 to i8
  %584 = load i32, ptr %29, align 4, !tbaa !9
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %585
  %587 = getelementptr inbounds %"class.basisu::color_rgba", ptr %586, i32 0, i32 0
  %588 = getelementptr inbounds %struct.anon, ptr %587, i32 0, i32 2
  store i8 %583, ptr %588, align 2, !tbaa !25
  %589 = load i32, ptr %29, align 4, !tbaa !9
  %590 = zext i32 %589 to i64
  %591 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %590
  %592 = getelementptr inbounds %"class.basisu::color_rgba", ptr %591, i32 0, i32 0
  %593 = getelementptr inbounds %struct.anon, ptr %592, i32 0, i32 3
  store i8 -1, ptr %593, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  br label %594

594:                                              ; preds = %535
  %595 = load i32, ptr %29, align 4, !tbaa !9
  %596 = add i32 %595, 1
  store i32 %596, ptr %29, align 4, !tbaa !9
  br label %528, !llvm.loop !28

597:                                              ; preds = %534
  %598 = load i32, ptr %28, align 4, !tbaa !9
  %599 = load i32, ptr %21, align 4, !tbaa !9
  %600 = sub i32 %599, %598
  store i32 %600, ptr %21, align 4, !tbaa !9
  %601 = load i32, ptr %28, align 4, !tbaa !9
  %602 = load ptr, ptr %20, align 8, !tbaa !5
  %603 = zext i32 %601 to i64
  %604 = getelementptr inbounds i8, ptr %602, i64 %603
  store ptr %604, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %13, align 4
  br label %605

605:                                              ; preds = %597, %526
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  %606 = load i32, ptr %13, align 4
  switch i32 %606, label %1292 [
    i32 0, label %607
  ]

607:                                              ; preds = %605
  br label %608

608:                                              ; preds = %607, %517
  br label %609

609:                                              ; preds = %608, %438
  br label %635

610:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  %611 = load ptr, ptr %12, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.basisu::tga_header", ptr %611, i32 0, i32 5
  %613 = load i8, ptr %612, align 1, !tbaa !15
  %614 = zext i8 %613 to i32
  %615 = ashr i32 %614, 3
  %616 = load ptr, ptr %12, align 8, !tbaa !5
  %617 = getelementptr inbounds %"struct.basisu::tga_header", ptr %616, i32 0, i32 4
  %618 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %617)
  %619 = mul i32 %615, %618
  store i32 %619, ptr %31, align 4, !tbaa !9
  %620 = load i32, ptr %21, align 4, !tbaa !9
  %621 = load i32, ptr %31, align 4, !tbaa !9
  %622 = icmp ult i32 %620, %621
  br i1 %622, label %623, label %624

623:                                              ; preds = %610
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %632

624:                                              ; preds = %610
  %625 = load i32, ptr %31, align 4, !tbaa !9
  %626 = load ptr, ptr %20, align 8, !tbaa !5
  %627 = zext i32 %625 to i64
  %628 = getelementptr inbounds i8, ptr %626, i64 %627
  store ptr %628, ptr %20, align 8, !tbaa !5
  %629 = load i32, ptr %31, align 4, !tbaa !9
  %630 = load i32, ptr %21, align 4, !tbaa !9
  %631 = add i32 %630, %629
  store i32 %631, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %13, align 4
  br label %632

632:                                              ; preds = %624, %623
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  %633 = load i32, ptr %13, align 4
  switch i32 %633, label %1292 [
    i32 0, label %634
  ]

634:                                              ; preds = %632
  br label %635

635:                                              ; preds = %634, %609
  br label %636

636:                                              ; preds = %635, %315, %310
  %637 = load ptr, ptr %12, align 8, !tbaa !5
  %638 = getelementptr inbounds %"struct.basisu::tga_header", ptr %637, i32 0, i32 8
  %639 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %638)
  %640 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %639, ptr %640, align 4, !tbaa !9
  %641 = load ptr, ptr %12, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.basisu::tga_header", ptr %641, i32 0, i32 9
  %643 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %642)
  %644 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %643, ptr %644, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %645 = load ptr, ptr %9, align 8, !tbaa !5
  %646 = load i32, ptr %645, align 4, !tbaa !9
  %647 = load i32, ptr %19, align 4, !tbaa !9
  %648 = mul i32 %646, %647
  store i32 %648, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %649 = load ptr, ptr %9, align 8, !tbaa !5
  %650 = load i32, ptr %649, align 4, !tbaa !9
  %651 = load ptr, ptr %11, align 8, !tbaa !5
  %652 = load i32, ptr %651, align 4, !tbaa !9
  %653 = mul nsw i32 %650, %652
  store i32 %653, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %654 = load i32, ptr %33, align 4, !tbaa !9
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = load i32, ptr %655, align 4, !tbaa !9
  %657 = mul i32 %654, %656
  %658 = zext i32 %657 to i64
  %659 = call noalias ptr @malloc(i64 noundef %658) #11
  store ptr %659, ptr %34, align 8, !tbaa !5
  %660 = load ptr, ptr %34, align 8, !tbaa !5
  %661 = icmp ne ptr %660, null
  br i1 %661, label %663, label %662

662:                                              ; preds = %636
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1291

663:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #10
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #10
  %664 = load i8, ptr %16, align 1, !tbaa !16, !range !29, !noundef !30
  %665 = trunc i8 %664 to i1
  br i1 %665, label %666, label %674

666:                                              ; preds = %663
  %667 = load i32, ptr %32, align 4, !tbaa !9
  %668 = zext i32 %667 to i64
  invoke void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %35, i64 noundef %668)
          to label %669 unwind label %670

669:                                              ; preds = %666
  br label %674

670:                                              ; preds = %666
  %671 = landingpad { ptr, i32 }
          cleanup
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %36, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %37, align 4
  br label %1290

674:                                              ; preds = %669, %663
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  store i32 0, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  store i32 0, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #10
  %675 = getelementptr inbounds [4 x i8], ptr %40, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 1 %675, i8 0, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %676

676:                                              ; preds = %1282, %674
  %677 = load i32, ptr %41, align 4, !tbaa !9
  %678 = load ptr, ptr %10, align 8, !tbaa !5
  %679 = load i32, ptr %678, align 4, !tbaa !9
  %680 = icmp slt i32 %677, %679
  br i1 %680, label %682, label %681

681:                                              ; preds = %676
  store i32 16, ptr %13, align 4
  br label %1285

682:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %683 = load i8, ptr %16, align 1, !tbaa !16, !range !29, !noundef !30
  %684 = trunc i8 %683 to i1
  br i1 %684, label %685, label %832

685:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %686 = load ptr, ptr %9, align 8, !tbaa !5
  %687 = load i32, ptr %686, align 4, !tbaa !9
  store i32 %687, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %688 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %35, i64 noundef 0) #10
  store ptr %688, ptr %44, align 8, !tbaa !5
  br label %689

689:                                              ; preds = %809, %685
  %690 = load i32, ptr %39, align 4, !tbaa !9
  %691 = icmp ne i32 %690, 0
  br i1 %691, label %733, label %692

692:                                              ; preds = %689
  %693 = load i32, ptr %21, align 4, !tbaa !9
  %694 = icmp ult i32 %693, 1
  br i1 %694, label %695, label %697

695:                                              ; preds = %692
  %696 = load ptr, ptr %34, align 8, !tbaa !5
  call void @free(ptr noundef %696) #10
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %829

697:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  %698 = load ptr, ptr %20, align 8, !tbaa !5
  %699 = getelementptr inbounds i8, ptr %698, i32 1
  store ptr %699, ptr %20, align 8, !tbaa !5
  %700 = load i8, ptr %698, align 1, !tbaa !25
  %701 = zext i8 %700 to i32
  store i32 %701, ptr %45, align 4, !tbaa !9
  %702 = load i32, ptr %21, align 4, !tbaa !9
  %703 = add i32 %702, -1
  store i32 %703, ptr %21, align 4, !tbaa !9
  %704 = load i32, ptr %45, align 4, !tbaa !9
  %705 = and i32 %704, 128
  store i32 %705, ptr %38, align 4, !tbaa !9
  %706 = load i32, ptr %45, align 4, !tbaa !9
  %707 = and i32 %706, 127
  %708 = add nsw i32 %707, 1
  store i32 %708, ptr %39, align 4, !tbaa !9
  %709 = load i32, ptr %38, align 4, !tbaa !9
  %710 = icmp ne i32 %709, 0
  br i1 %710, label %711, label %729

711:                                              ; preds = %697
  %712 = load i32, ptr %21, align 4, !tbaa !9
  %713 = load i32, ptr %19, align 4, !tbaa !9
  %714 = icmp ult i32 %712, %713
  br i1 %714, label %715, label %717

715:                                              ; preds = %711
  %716 = load ptr, ptr %34, align 8, !tbaa !5
  call void @free(ptr noundef %716) #10
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %730

717:                                              ; preds = %711
  %718 = getelementptr inbounds [4 x i8], ptr %40, i64 0, i64 0
  %719 = load ptr, ptr %20, align 8, !tbaa !5
  %720 = load i32, ptr %19, align 4, !tbaa !9
  %721 = zext i32 %720 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %718, ptr align 1 %719, i64 %721, i1 false)
  %722 = load i32, ptr %19, align 4, !tbaa !9
  %723 = load ptr, ptr %20, align 8, !tbaa !5
  %724 = zext i32 %722 to i64
  %725 = getelementptr inbounds i8, ptr %723, i64 %724
  store ptr %725, ptr %20, align 8, !tbaa !5
  %726 = load i32, ptr %19, align 4, !tbaa !9
  %727 = load i32, ptr %21, align 4, !tbaa !9
  %728 = sub i32 %727, %726
  store i32 %728, ptr %21, align 4, !tbaa !9
  br label %729

729:                                              ; preds = %717, %697
  store i32 0, ptr %13, align 4
  br label %730

730:                                              ; preds = %729, %715
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  %731 = load i32, ptr %13, align 4
  switch i32 %731, label %829 [
    i32 0, label %732
  ]

732:                                              ; preds = %730
  br label %733

733:                                              ; preds = %732, %689
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #10
  %734 = load i32, ptr %43, align 4, !tbaa !9
  %735 = load i32, ptr %39, align 4, !tbaa !9
  %736 = invoke noundef i32 @_ZN6basisu7minimumIjEET_S1_S1_(i32 noundef %734, i32 noundef %735)
          to label %737 unwind label %752

737:                                              ; preds = %733
  store i32 %736, ptr %46, align 4, !tbaa !9
  %738 = load i32, ptr %46, align 4, !tbaa !9
  %739 = load i32, ptr %43, align 4, !tbaa !9
  %740 = sub i32 %739, %738
  store i32 %740, ptr %43, align 4, !tbaa !9
  %741 = load i32, ptr %46, align 4, !tbaa !9
  %742 = load i32, ptr %39, align 4, !tbaa !9
  %743 = sub i32 %742, %741
  store i32 %743, ptr %39, align 4, !tbaa !9
  %744 = load i32, ptr %38, align 4, !tbaa !9
  %745 = icmp ne i32 %744, 0
  br i1 %745, label %746, label %777

746:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %747

747:                                              ; preds = %773, %746
  %748 = load i32, ptr %47, align 4, !tbaa !9
  %749 = load i32, ptr %46, align 4, !tbaa !9
  %750 = icmp ult i32 %748, %749
  br i1 %750, label %756, label %751

751:                                              ; preds = %747
  store i32 21, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  br label %776

752:                                              ; preds = %733
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %36, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %37, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  br label %1290

756:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #10
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %757

757:                                              ; preds = %769, %756
  %758 = load i32, ptr %48, align 4, !tbaa !9
  %759 = load i32, ptr %19, align 4, !tbaa !9
  %760 = icmp ult i32 %758, %759
  br i1 %760, label %762, label %761

761:                                              ; preds = %757
  store i32 24, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  br label %772

762:                                              ; preds = %757
  %763 = load i32, ptr %48, align 4, !tbaa !9
  %764 = zext i32 %763 to i64
  %765 = getelementptr inbounds [4 x i8], ptr %40, i64 0, i64 %764
  %766 = load i8, ptr %765, align 1, !tbaa !25
  %767 = load ptr, ptr %44, align 8, !tbaa !5
  %768 = getelementptr inbounds i8, ptr %767, i32 1
  store ptr %768, ptr %44, align 8, !tbaa !5
  store i8 %766, ptr %767, align 1, !tbaa !25
  br label %769

769:                                              ; preds = %762
  %770 = load i32, ptr %48, align 4, !tbaa !9
  %771 = add i32 %770, 1
  store i32 %771, ptr %48, align 4, !tbaa !9
  br label %757, !llvm.loop !31

772:                                              ; preds = %761
  br label %773

773:                                              ; preds = %772
  %774 = load i32, ptr %47, align 4, !tbaa !9
  %775 = add i32 %774, 1
  store i32 %775, ptr %47, align 4, !tbaa !9
  br label %747, !llvm.loop !32

776:                                              ; preds = %751
  br label %805

777:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #10
  %778 = load i32, ptr %46, align 4, !tbaa !9
  %779 = load i32, ptr %19, align 4, !tbaa !9
  %780 = mul i32 %778, %779
  store i32 %780, ptr %49, align 4, !tbaa !9
  %781 = load i32, ptr %21, align 4, !tbaa !9
  %782 = load i32, ptr %49, align 4, !tbaa !9
  %783 = icmp ult i32 %781, %782
  br i1 %783, label %784, label %786

784:                                              ; preds = %777
  %785 = load ptr, ptr %34, align 8, !tbaa !5
  call void @free(ptr noundef %785) #10
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %802

786:                                              ; preds = %777
  %787 = load ptr, ptr %44, align 8, !tbaa !5
  %788 = load ptr, ptr %20, align 8, !tbaa !5
  %789 = load i32, ptr %49, align 4, !tbaa !9
  %790 = zext i32 %789 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %787, ptr align 1 %788, i64 %790, i1 false)
  %791 = load i32, ptr %49, align 4, !tbaa !9
  %792 = load ptr, ptr %44, align 8, !tbaa !5
  %793 = zext i32 %791 to i64
  %794 = getelementptr inbounds i8, ptr %792, i64 %793
  store ptr %794, ptr %44, align 8, !tbaa !5
  %795 = load i32, ptr %49, align 4, !tbaa !9
  %796 = load ptr, ptr %20, align 8, !tbaa !5
  %797 = zext i32 %795 to i64
  %798 = getelementptr inbounds i8, ptr %796, i64 %797
  store ptr %798, ptr %20, align 8, !tbaa !5
  %799 = load i32, ptr %49, align 4, !tbaa !9
  %800 = load i32, ptr %21, align 4, !tbaa !9
  %801 = sub i32 %800, %799
  store i32 %801, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %13, align 4
  br label %802

802:                                              ; preds = %786, %784
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  %803 = load i32, ptr %13, align 4
  switch i32 %803, label %806 [
    i32 0, label %804
  ]

804:                                              ; preds = %802
  br label %805

805:                                              ; preds = %804, %776
  store i32 0, ptr %13, align 4
  br label %806

806:                                              ; preds = %805, %802
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  %807 = load i32, ptr %13, align 4
  switch i32 %807, label %829 [
    i32 0, label %808
  ]

808:                                              ; preds = %806
  br label %809

809:                                              ; preds = %808
  %810 = load i32, ptr %43, align 4, !tbaa !9
  %811 = icmp ne i32 %810, 0
  br i1 %811, label %689, label %812, !llvm.loop !33

812:                                              ; preds = %809
  %813 = load ptr, ptr %44, align 8, !tbaa !5
  %814 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %35, i64 noundef 0) #10
  %815 = ptrtoint ptr %813 to i64
  %816 = ptrtoint ptr %814 to i64
  %817 = sub i64 %815, %816
  %818 = load ptr, ptr %9, align 8, !tbaa !5
  %819 = load i32, ptr %818, align 4, !tbaa !9
  %820 = load i32, ptr %19, align 4, !tbaa !9
  %821 = mul i32 %819, %820
  %822 = zext i32 %821 to i64
  %823 = icmp eq i64 %817, %822
  br i1 %823, label %824, label %825

824:                                              ; preds = %812
  br label %827

825:                                              ; preds = %812
  call void @__assert_fail(ptr noundef @.str.35, ptr noundef @.str.4, i32 noundef 1955, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

826:                                              ; No predecessors!
  br label %827

827:                                              ; preds = %826, %824
  %828 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %35, i64 noundef 0) #10
  store ptr %828, ptr %42, align 8, !tbaa !5
  store i32 0, ptr %13, align 4
  br label %829

829:                                              ; preds = %827, %806, %730, %695
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  %830 = load i32, ptr %13, align 4
  switch i32 %830, label %1279 [
    i32 0, label %831
  ]

831:                                              ; preds = %829
  br label %847

832:                                              ; preds = %682
  %833 = load i32, ptr %21, align 4, !tbaa !9
  %834 = load i32, ptr %32, align 4, !tbaa !9
  %835 = icmp ult i32 %833, %834
  br i1 %835, label %836, label %838

836:                                              ; preds = %832
  %837 = load ptr, ptr %34, align 8, !tbaa !5
  call void @free(ptr noundef %837) #10
  store ptr null, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1279

838:                                              ; preds = %832
  %839 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %839, ptr %42, align 8, !tbaa !5
  %840 = load i32, ptr %32, align 4, !tbaa !9
  %841 = load i32, ptr %21, align 4, !tbaa !9
  %842 = sub i32 %841, %840
  store i32 %842, ptr %21, align 4, !tbaa !9
  %843 = load i32, ptr %32, align 4, !tbaa !9
  %844 = load ptr, ptr %20, align 8, !tbaa !5
  %845 = zext i32 %843 to i64
  %846 = getelementptr inbounds i8, ptr %844, i64 %845
  store ptr %846, ptr %20, align 8, !tbaa !5
  br label %847

847:                                              ; preds = %838, %831
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  %848 = load ptr, ptr %34, align 8, !tbaa !5
  %849 = load i8, ptr %15, align 1, !tbaa !16, !range !29, !noundef !30
  %850 = trunc i8 %849 to i1
  br i1 %850, label %851, label %857

851:                                              ; preds = %847
  %852 = load ptr, ptr %10, align 8, !tbaa !5
  %853 = load i32, ptr %852, align 4, !tbaa !9
  %854 = sub nsw i32 %853, 1
  %855 = load i32, ptr %41, align 4, !tbaa !9
  %856 = sub nsw i32 %854, %855
  br label %859

857:                                              ; preds = %847
  %858 = load i32, ptr %41, align 4, !tbaa !9
  br label %859

859:                                              ; preds = %857, %851
  %860 = phi i32 [ %856, %851 ], [ %858, %857 ]
  %861 = load i32, ptr %33, align 4, !tbaa !9
  %862 = mul i32 %860, %861
  %863 = zext i32 %862 to i64
  %864 = getelementptr inbounds i8, ptr %848, i64 %863
  %865 = load i8, ptr %14, align 1, !tbaa !16, !range !29, !noundef !30
  %866 = trunc i8 %865 to i1
  br i1 %866, label %867, label %874

867:                                              ; preds = %859
  %868 = load ptr, ptr %9, align 8, !tbaa !5
  %869 = load i32, ptr %868, align 4, !tbaa !9
  %870 = sub nsw i32 %869, 1
  %871 = load ptr, ptr %11, align 8, !tbaa !5
  %872 = load i32, ptr %871, align 4, !tbaa !9
  %873 = mul nsw i32 %870, %872
  br label %875

874:                                              ; preds = %859
  br label %875

875:                                              ; preds = %874, %867
  %876 = phi i32 [ %873, %867 ], [ 0, %874 ]
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds i8, ptr %864, i64 %877
  store ptr %878, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  %879 = load i8, ptr %14, align 1, !tbaa !16, !range !29, !noundef !30
  %880 = trunc i8 %879 to i1
  br i1 %880, label %881, label %885

881:                                              ; preds = %875
  %882 = load ptr, ptr %11, align 8, !tbaa !5
  %883 = load i32, ptr %882, align 4, !tbaa !9
  %884 = sub nsw i32 0, %883
  br label %888

885:                                              ; preds = %875
  %886 = load ptr, ptr %11, align 8, !tbaa !5
  %887 = load i32, ptr %886, align 4, !tbaa !9
  br label %888

888:                                              ; preds = %885, %881
  %889 = phi i32 [ %884, %881 ], [ %887, %885 ]
  store i32 %889, ptr %51, align 4, !tbaa !9
  %890 = load ptr, ptr %12, align 8, !tbaa !5
  %891 = getelementptr inbounds %"struct.basisu::tga_header", ptr %890, i32 0, i32 10
  %892 = load i8, ptr %891, align 1, !tbaa !21
  %893 = zext i8 %892 to i32
  switch i32 %893, label %1277 [
    i32 32, label %894
    i32 24, label %944
    i32 16, label %989
    i32 15, label %989
    i32 8, label %1112
  ]

894:                                              ; preds = %888
  %895 = load i32, ptr %19, align 4, !tbaa !9
  %896 = icmp eq i32 %895, 4
  br i1 %896, label %897, label %901

897:                                              ; preds = %894
  %898 = load ptr, ptr %11, align 8, !tbaa !5
  %899 = load i32, ptr %898, align 4, !tbaa !9
  %900 = icmp eq i32 %899, 4
  br label %901

901:                                              ; preds = %897, %894
  %902 = phi i1 [ false, %894 ], [ %900, %897 ]
  br i1 %902, label %903, label %904

903:                                              ; preds = %901
  br label %906

904:                                              ; preds = %901
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.4, i32 noundef 1979, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

905:                                              ; No predecessors!
  br label %906

906:                                              ; preds = %905, %903
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %907

907:                                              ; preds = %934, %906
  %908 = load i32, ptr %52, align 4, !tbaa !9
  %909 = load ptr, ptr %9, align 8, !tbaa !5
  %910 = load i32, ptr %909, align 4, !tbaa !9
  %911 = icmp slt i32 %908, %910
  br i1 %911, label %913, label %912

912:                                              ; preds = %907
  store i32 28, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  br label %943

913:                                              ; preds = %907
  %914 = load ptr, ptr %42, align 8, !tbaa !5
  %915 = getelementptr inbounds i8, ptr %914, i64 2
  %916 = load i8, ptr %915, align 1, !tbaa !25
  %917 = load ptr, ptr %50, align 8, !tbaa !5
  %918 = getelementptr inbounds i8, ptr %917, i64 0
  store i8 %916, ptr %918, align 1, !tbaa !25
  %919 = load ptr, ptr %42, align 8, !tbaa !5
  %920 = getelementptr inbounds i8, ptr %919, i64 1
  %921 = load i8, ptr %920, align 1, !tbaa !25
  %922 = load ptr, ptr %50, align 8, !tbaa !5
  %923 = getelementptr inbounds i8, ptr %922, i64 1
  store i8 %921, ptr %923, align 1, !tbaa !25
  %924 = load ptr, ptr %42, align 8, !tbaa !5
  %925 = getelementptr inbounds i8, ptr %924, i64 0
  %926 = load i8, ptr %925, align 1, !tbaa !25
  %927 = load ptr, ptr %50, align 8, !tbaa !5
  %928 = getelementptr inbounds i8, ptr %927, i64 2
  store i8 %926, ptr %928, align 1, !tbaa !25
  %929 = load ptr, ptr %42, align 8, !tbaa !5
  %930 = getelementptr inbounds i8, ptr %929, i64 3
  %931 = load i8, ptr %930, align 1, !tbaa !25
  %932 = load ptr, ptr %50, align 8, !tbaa !5
  %933 = getelementptr inbounds i8, ptr %932, i64 3
  store i8 %931, ptr %933, align 1, !tbaa !25
  br label %934

934:                                              ; preds = %913
  %935 = load i32, ptr %52, align 4, !tbaa !9
  %936 = add nsw i32 %935, 1
  store i32 %936, ptr %52, align 4, !tbaa !9
  %937 = load ptr, ptr %42, align 8, !tbaa !5
  %938 = getelementptr inbounds i8, ptr %937, i64 4
  store ptr %938, ptr %42, align 8, !tbaa !5
  %939 = load i32, ptr %51, align 4, !tbaa !9
  %940 = load ptr, ptr %50, align 8, !tbaa !5
  %941 = sext i32 %939 to i64
  %942 = getelementptr inbounds i8, ptr %940, i64 %941
  store ptr %942, ptr %50, align 8, !tbaa !5
  br label %907, !llvm.loop !34

943:                                              ; preds = %912
  br label %1278

944:                                              ; preds = %888
  %945 = load i32, ptr %19, align 4, !tbaa !9
  %946 = icmp eq i32 %945, 3
  br i1 %946, label %947, label %951

947:                                              ; preds = %944
  %948 = load ptr, ptr %11, align 8, !tbaa !5
  %949 = load i32, ptr %948, align 4, !tbaa !9
  %950 = icmp eq i32 %949, 3
  br label %951

951:                                              ; preds = %947, %944
  %952 = phi i1 [ false, %944 ], [ %950, %947 ]
  br i1 %952, label %953, label %954

953:                                              ; preds = %951
  br label %956

954:                                              ; preds = %951
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.4, i32 noundef 1989, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

955:                                              ; No predecessors!
  br label %956

956:                                              ; preds = %955, %953
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #10
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %957

957:                                              ; preds = %979, %956
  %958 = load i32, ptr %53, align 4, !tbaa !9
  %959 = load ptr, ptr %9, align 8, !tbaa !5
  %960 = load i32, ptr %959, align 4, !tbaa !9
  %961 = icmp slt i32 %958, %960
  br i1 %961, label %963, label %962

962:                                              ; preds = %957
  store i32 31, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  br label %988

963:                                              ; preds = %957
  %964 = load ptr, ptr %42, align 8, !tbaa !5
  %965 = getelementptr inbounds i8, ptr %964, i64 2
  %966 = load i8, ptr %965, align 1, !tbaa !25
  %967 = load ptr, ptr %50, align 8, !tbaa !5
  %968 = getelementptr inbounds i8, ptr %967, i64 0
  store i8 %966, ptr %968, align 1, !tbaa !25
  %969 = load ptr, ptr %42, align 8, !tbaa !5
  %970 = getelementptr inbounds i8, ptr %969, i64 1
  %971 = load i8, ptr %970, align 1, !tbaa !25
  %972 = load ptr, ptr %50, align 8, !tbaa !5
  %973 = getelementptr inbounds i8, ptr %972, i64 1
  store i8 %971, ptr %973, align 1, !tbaa !25
  %974 = load ptr, ptr %42, align 8, !tbaa !5
  %975 = getelementptr inbounds i8, ptr %974, i64 0
  %976 = load i8, ptr %975, align 1, !tbaa !25
  %977 = load ptr, ptr %50, align 8, !tbaa !5
  %978 = getelementptr inbounds i8, ptr %977, i64 2
  store i8 %976, ptr %978, align 1, !tbaa !25
  br label %979

979:                                              ; preds = %963
  %980 = load i32, ptr %53, align 4, !tbaa !9
  %981 = add nsw i32 %980, 1
  store i32 %981, ptr %53, align 4, !tbaa !9
  %982 = load ptr, ptr %42, align 8, !tbaa !5
  %983 = getelementptr inbounds i8, ptr %982, i64 3
  store ptr %983, ptr %42, align 8, !tbaa !5
  %984 = load i32, ptr %51, align 4, !tbaa !9
  %985 = load ptr, ptr %50, align 8, !tbaa !5
  %986 = sext i32 %984 to i64
  %987 = getelementptr inbounds i8, ptr %985, i64 %986
  store ptr %987, ptr %50, align 8, !tbaa !5
  br label %957, !llvm.loop !35

988:                                              ; preds = %962
  br label %1278

989:                                              ; preds = %888, %888
  %990 = load i32, ptr %18, align 4, !tbaa !19
  %991 = icmp eq i32 %990, 2
  br i1 %991, label %992, label %1058

992:                                              ; preds = %989
  %993 = load i32, ptr %19, align 4, !tbaa !9
  %994 = icmp eq i32 %993, 2
  br i1 %994, label %995, label %999

995:                                              ; preds = %992
  %996 = load ptr, ptr %11, align 8, !tbaa !5
  %997 = load i32, ptr %996, align 4, !tbaa !9
  %998 = icmp eq i32 %997, 3
  br label %999

999:                                              ; preds = %995, %992
  %1000 = phi i1 [ false, %992 ], [ %998, %995 ]
  br i1 %1000, label %1001, label %1002

1001:                                             ; preds = %999
  br label %1004

1002:                                             ; preds = %999
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.4, i32 noundef 2001, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1003:                                             ; No predecessors!
  br label %1004

1004:                                             ; preds = %1003, %1001
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1048, %1004
  %1006 = load i32, ptr %54, align 4, !tbaa !9
  %1007 = load ptr, ptr %9, align 8, !tbaa !5
  %1008 = load i32, ptr %1007, align 4, !tbaa !9
  %1009 = icmp slt i32 %1006, %1008
  br i1 %1009, label %1011, label %1010

1010:                                             ; preds = %1005
  store i32 34, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %1057

1011:                                             ; preds = %1005
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #10
  %1012 = load ptr, ptr %42, align 8, !tbaa !5
  %1013 = getelementptr inbounds i8, ptr %1012, i64 0
  %1014 = load i8, ptr %1013, align 1, !tbaa !25
  %1015 = zext i8 %1014 to i32
  %1016 = load ptr, ptr %42, align 8, !tbaa !5
  %1017 = getelementptr inbounds i8, ptr %1016, i64 1
  %1018 = load i8, ptr %1017, align 1, !tbaa !25
  %1019 = zext i8 %1018 to i32
  %1020 = shl i32 %1019, 8
  %1021 = or i32 %1015, %1020
  store i32 %1021, ptr %55, align 4, !tbaa !9
  %1022 = load i32, ptr %55, align 4, !tbaa !9
  %1023 = lshr i32 %1022, 10
  %1024 = and i32 %1023, 31
  %1025 = mul i32 %1024, 255
  %1026 = add i32 %1025, 15
  %1027 = udiv i32 %1026, 31
  %1028 = trunc i32 %1027 to i8
  %1029 = load ptr, ptr %50, align 8, !tbaa !5
  %1030 = getelementptr inbounds i8, ptr %1029, i64 0
  store i8 %1028, ptr %1030, align 1, !tbaa !25
  %1031 = load i32, ptr %55, align 4, !tbaa !9
  %1032 = lshr i32 %1031, 5
  %1033 = and i32 %1032, 31
  %1034 = mul i32 %1033, 255
  %1035 = add i32 %1034, 15
  %1036 = udiv i32 %1035, 31
  %1037 = trunc i32 %1036 to i8
  %1038 = load ptr, ptr %50, align 8, !tbaa !5
  %1039 = getelementptr inbounds i8, ptr %1038, i64 1
  store i8 %1037, ptr %1039, align 1, !tbaa !25
  %1040 = load i32, ptr %55, align 4, !tbaa !9
  %1041 = and i32 %1040, 31
  %1042 = mul i32 %1041, 255
  %1043 = add i32 %1042, 15
  %1044 = udiv i32 %1043, 31
  %1045 = trunc i32 %1044 to i8
  %1046 = load ptr, ptr %50, align 8, !tbaa !5
  %1047 = getelementptr inbounds i8, ptr %1046, i64 2
  store i8 %1045, ptr %1047, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  br label %1048

1048:                                             ; preds = %1011
  %1049 = load i32, ptr %54, align 4, !tbaa !9
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %54, align 4, !tbaa !9
  %1051 = load ptr, ptr %42, align 8, !tbaa !5
  %1052 = getelementptr inbounds i8, ptr %1051, i64 2
  store ptr %1052, ptr %42, align 8, !tbaa !5
  %1053 = load i32, ptr %51, align 4, !tbaa !9
  %1054 = load ptr, ptr %50, align 8, !tbaa !5
  %1055 = sext i32 %1053 to i64
  %1056 = getelementptr inbounds i8, ptr %1054, i64 %1055
  store ptr %1056, ptr %50, align 8, !tbaa !5
  br label %1005, !llvm.loop !36

1057:                                             ; preds = %1010
  br label %1111

1058:                                             ; preds = %989
  %1059 = load i32, ptr %18, align 4, !tbaa !19
  %1060 = icmp eq i32 %1059, 3
  br i1 %1060, label %1061, label %1068

1061:                                             ; preds = %1058
  %1062 = load i32, ptr %19, align 4, !tbaa !9
  %1063 = icmp eq i32 %1062, 2
  br i1 %1063, label %1064, label %1068

1064:                                             ; preds = %1061
  %1065 = load ptr, ptr %11, align 8, !tbaa !5
  %1066 = load i32, ptr %1065, align 4, !tbaa !9
  %1067 = icmp eq i32 %1066, 4
  br label %1068

1068:                                             ; preds = %1064, %1061, %1058
  %1069 = phi i1 [ false, %1061 ], [ false, %1058 ], [ %1067, %1064 ]
  br i1 %1069, label %1070, label %1071

1070:                                             ; preds = %1068
  br label %1073

1071:                                             ; preds = %1068
  call void @__assert_fail(ptr noundef @.str.39, ptr noundef @.str.4, i32 noundef 2012, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1072:                                             ; No predecessors!
  br label %1073

1073:                                             ; preds = %1072, %1070
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #10
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %1074

1074:                                             ; preds = %1101, %1073
  %1075 = load i32, ptr %56, align 4, !tbaa !9
  %1076 = load ptr, ptr %9, align 8, !tbaa !5
  %1077 = load i32, ptr %1076, align 4, !tbaa !9
  %1078 = icmp slt i32 %1075, %1077
  br i1 %1078, label %1080, label %1079

1079:                                             ; preds = %1074
  store i32 37, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  br label %1110

1080:                                             ; preds = %1074
  %1081 = load ptr, ptr %42, align 8, !tbaa !5
  %1082 = getelementptr inbounds i8, ptr %1081, i64 0
  %1083 = load i8, ptr %1082, align 1, !tbaa !25
  %1084 = load ptr, ptr %50, align 8, !tbaa !5
  %1085 = getelementptr inbounds i8, ptr %1084, i64 0
  store i8 %1083, ptr %1085, align 1, !tbaa !25
  %1086 = load ptr, ptr %42, align 8, !tbaa !5
  %1087 = getelementptr inbounds i8, ptr %1086, i64 0
  %1088 = load i8, ptr %1087, align 1, !tbaa !25
  %1089 = load ptr, ptr %50, align 8, !tbaa !5
  %1090 = getelementptr inbounds i8, ptr %1089, i64 1
  store i8 %1088, ptr %1090, align 1, !tbaa !25
  %1091 = load ptr, ptr %42, align 8, !tbaa !5
  %1092 = getelementptr inbounds i8, ptr %1091, i64 0
  %1093 = load i8, ptr %1092, align 1, !tbaa !25
  %1094 = load ptr, ptr %50, align 8, !tbaa !5
  %1095 = getelementptr inbounds i8, ptr %1094, i64 2
  store i8 %1093, ptr %1095, align 1, !tbaa !25
  %1096 = load ptr, ptr %42, align 8, !tbaa !5
  %1097 = getelementptr inbounds i8, ptr %1096, i64 1
  %1098 = load i8, ptr %1097, align 1, !tbaa !25
  %1099 = load ptr, ptr %50, align 8, !tbaa !5
  %1100 = getelementptr inbounds i8, ptr %1099, i64 3
  store i8 %1098, ptr %1100, align 1, !tbaa !25
  br label %1101

1101:                                             ; preds = %1080
  %1102 = load i32, ptr %56, align 4, !tbaa !9
  %1103 = add nsw i32 %1102, 1
  store i32 %1103, ptr %56, align 4, !tbaa !9
  %1104 = load ptr, ptr %42, align 8, !tbaa !5
  %1105 = getelementptr inbounds i8, ptr %1104, i64 2
  store ptr %1105, ptr %42, align 8, !tbaa !5
  %1106 = load i32, ptr %51, align 4, !tbaa !9
  %1107 = load ptr, ptr %50, align 8, !tbaa !5
  %1108 = sext i32 %1106 to i64
  %1109 = getelementptr inbounds i8, ptr %1107, i64 %1108
  store ptr %1109, ptr %50, align 8, !tbaa !5
  br label %1074, !llvm.loop !37

1110:                                             ; preds = %1079
  br label %1111

1111:                                             ; preds = %1110, %1057
  br label %1278

1112:                                             ; preds = %888
  %1113 = load i32, ptr %19, align 4, !tbaa !9
  %1114 = icmp eq i32 %1113, 1
  br i1 %1114, label %1115, label %1116

1115:                                             ; preds = %1112
  br label %1118

1116:                                             ; preds = %1112
  call void @__assert_fail(ptr noundef @.str.40, ptr noundef @.str.4, i32 noundef 2023, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1117:                                             ; No predecessors!
  br label %1118

1118:                                             ; preds = %1117, %1115
  %1119 = load i32, ptr %18, align 4, !tbaa !19
  %1120 = icmp eq i32 %1119, 1
  br i1 %1120, label %1121, label %1240

1121:                                             ; preds = %1118
  %1122 = load ptr, ptr %12, align 8, !tbaa !5
  %1123 = getelementptr inbounds %"struct.basisu::tga_header", ptr %1122, i32 0, i32 5
  %1124 = load i8, ptr %1123, align 1, !tbaa !15
  %1125 = zext i8 %1124 to i32
  %1126 = icmp eq i32 %1125, 32
  br i1 %1126, label %1127, label %1187

1127:                                             ; preds = %1121
  %1128 = load ptr, ptr %11, align 8, !tbaa !5
  %1129 = load i32, ptr %1128, align 4, !tbaa !9
  %1130 = icmp eq i32 %1129, 4
  br i1 %1130, label %1131, label %1132

1131:                                             ; preds = %1127
  br label %1134

1132:                                             ; preds = %1127
  call void @__assert_fail(ptr noundef @.str.41, ptr noundef @.str.4, i32 noundef 2028, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1133:                                             ; No predecessors!
  br label %1134

1134:                                             ; preds = %1133, %1131
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %1135

1135:                                             ; preds = %1177, %1134
  %1136 = load i32, ptr %57, align 4, !tbaa !9
  %1137 = load ptr, ptr %9, align 8, !tbaa !5
  %1138 = load i32, ptr %1137, align 4, !tbaa !9
  %1139 = icmp slt i32 %1136, %1138
  br i1 %1139, label %1141, label %1140

1140:                                             ; preds = %1135
  store i32 40, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  br label %1186

1141:                                             ; preds = %1135
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #10
  %1142 = load ptr, ptr %42, align 8, !tbaa !5
  %1143 = load i8, ptr %1142, align 1, !tbaa !25
  %1144 = zext i8 %1143 to i32
  store i32 %1144, ptr %58, align 4, !tbaa !9
  %1145 = load i32, ptr %58, align 4, !tbaa !9
  %1146 = zext i32 %1145 to i64
  %1147 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1146
  %1148 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1147, i32 0, i32 0
  %1149 = getelementptr inbounds %struct.anon, ptr %1148, i32 0, i32 0
  %1150 = load i8, ptr %1149, align 4, !tbaa !25
  %1151 = load ptr, ptr %50, align 8, !tbaa !5
  %1152 = getelementptr inbounds i8, ptr %1151, i64 0
  store i8 %1150, ptr %1152, align 1, !tbaa !25
  %1153 = load i32, ptr %58, align 4, !tbaa !9
  %1154 = zext i32 %1153 to i64
  %1155 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1154
  %1156 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1155, i32 0, i32 0
  %1157 = getelementptr inbounds %struct.anon, ptr %1156, i32 0, i32 1
  %1158 = load i8, ptr %1157, align 1, !tbaa !25
  %1159 = load ptr, ptr %50, align 8, !tbaa !5
  %1160 = getelementptr inbounds i8, ptr %1159, i64 1
  store i8 %1158, ptr %1160, align 1, !tbaa !25
  %1161 = load i32, ptr %58, align 4, !tbaa !9
  %1162 = zext i32 %1161 to i64
  %1163 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1162
  %1164 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1163, i32 0, i32 0
  %1165 = getelementptr inbounds %struct.anon, ptr %1164, i32 0, i32 2
  %1166 = load i8, ptr %1165, align 2, !tbaa !25
  %1167 = load ptr, ptr %50, align 8, !tbaa !5
  %1168 = getelementptr inbounds i8, ptr %1167, i64 2
  store i8 %1166, ptr %1168, align 1, !tbaa !25
  %1169 = load i32, ptr %58, align 4, !tbaa !9
  %1170 = zext i32 %1169 to i64
  %1171 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1170
  %1172 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1171, i32 0, i32 0
  %1173 = getelementptr inbounds %struct.anon, ptr %1172, i32 0, i32 3
  %1174 = load i8, ptr %1173, align 1, !tbaa !25
  %1175 = load ptr, ptr %50, align 8, !tbaa !5
  %1176 = getelementptr inbounds i8, ptr %1175, i64 3
  store i8 %1174, ptr %1176, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #10
  br label %1177

1177:                                             ; preds = %1141
  %1178 = load i32, ptr %57, align 4, !tbaa !9
  %1179 = add nsw i32 %1178, 1
  store i32 %1179, ptr %57, align 4, !tbaa !9
  %1180 = load ptr, ptr %42, align 8, !tbaa !5
  %1181 = getelementptr inbounds i8, ptr %1180, i32 1
  store ptr %1181, ptr %42, align 8, !tbaa !5
  %1182 = load i32, ptr %51, align 4, !tbaa !9
  %1183 = load ptr, ptr %50, align 8, !tbaa !5
  %1184 = sext i32 %1182 to i64
  %1185 = getelementptr inbounds i8, ptr %1183, i64 %1184
  store ptr %1185, ptr %50, align 8, !tbaa !5
  br label %1135, !llvm.loop !38

1186:                                             ; preds = %1140
  br label %1239

1187:                                             ; preds = %1121
  %1188 = load ptr, ptr %11, align 8, !tbaa !5
  %1189 = load i32, ptr %1188, align 4, !tbaa !9
  %1190 = icmp eq i32 %1189, 3
  br i1 %1190, label %1191, label %1192

1191:                                             ; preds = %1187
  br label %1194

1192:                                             ; preds = %1187
  call void @__assert_fail(ptr noundef @.str.42, ptr noundef @.str.4, i32 noundef 2040, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1193:                                             ; No predecessors!
  br label %1194

1194:                                             ; preds = %1193, %1191
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #10
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %1195

1195:                                             ; preds = %1229, %1194
  %1196 = load i32, ptr %59, align 4, !tbaa !9
  %1197 = load ptr, ptr %9, align 8, !tbaa !5
  %1198 = load i32, ptr %1197, align 4, !tbaa !9
  %1199 = icmp slt i32 %1196, %1198
  br i1 %1199, label %1201, label %1200

1200:                                             ; preds = %1195
  store i32 43, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  br label %1238

1201:                                             ; preds = %1195
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #10
  %1202 = load ptr, ptr %42, align 8, !tbaa !5
  %1203 = load i8, ptr %1202, align 1, !tbaa !25
  %1204 = zext i8 %1203 to i32
  store i32 %1204, ptr %60, align 4, !tbaa !9
  %1205 = load i32, ptr %60, align 4, !tbaa !9
  %1206 = zext i32 %1205 to i64
  %1207 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1206
  %1208 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1207, i32 0, i32 0
  %1209 = getelementptr inbounds %struct.anon, ptr %1208, i32 0, i32 0
  %1210 = load i8, ptr %1209, align 4, !tbaa !25
  %1211 = load ptr, ptr %50, align 8, !tbaa !5
  %1212 = getelementptr inbounds i8, ptr %1211, i64 0
  store i8 %1210, ptr %1212, align 1, !tbaa !25
  %1213 = load i32, ptr %60, align 4, !tbaa !9
  %1214 = zext i32 %1213 to i64
  %1215 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1214
  %1216 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1215, i32 0, i32 0
  %1217 = getelementptr inbounds %struct.anon, ptr %1216, i32 0, i32 1
  %1218 = load i8, ptr %1217, align 1, !tbaa !25
  %1219 = load ptr, ptr %50, align 8, !tbaa !5
  %1220 = getelementptr inbounds i8, ptr %1219, i64 1
  store i8 %1218, ptr %1220, align 1, !tbaa !25
  %1221 = load i32, ptr %60, align 4, !tbaa !9
  %1222 = zext i32 %1221 to i64
  %1223 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %22, i64 0, i64 %1222
  %1224 = getelementptr inbounds %"class.basisu::color_rgba", ptr %1223, i32 0, i32 0
  %1225 = getelementptr inbounds %struct.anon, ptr %1224, i32 0, i32 2
  %1226 = load i8, ptr %1225, align 2, !tbaa !25
  %1227 = load ptr, ptr %50, align 8, !tbaa !5
  %1228 = getelementptr inbounds i8, ptr %1227, i64 2
  store i8 %1226, ptr %1228, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  br label %1229

1229:                                             ; preds = %1201
  %1230 = load i32, ptr %59, align 4, !tbaa !9
  %1231 = add nsw i32 %1230, 1
  store i32 %1231, ptr %59, align 4, !tbaa !9
  %1232 = load ptr, ptr %42, align 8, !tbaa !5
  %1233 = getelementptr inbounds i8, ptr %1232, i32 1
  store ptr %1233, ptr %42, align 8, !tbaa !5
  %1234 = load i32, ptr %51, align 4, !tbaa !9
  %1235 = load ptr, ptr %50, align 8, !tbaa !5
  %1236 = sext i32 %1234 to i64
  %1237 = getelementptr inbounds i8, ptr %1235, i64 %1236
  store ptr %1237, ptr %50, align 8, !tbaa !5
  br label %1195, !llvm.loop !39

1238:                                             ; preds = %1200
  br label %1239

1239:                                             ; preds = %1238, %1186
  br label %1276

1240:                                             ; preds = %1118
  %1241 = load ptr, ptr %11, align 8, !tbaa !5
  %1242 = load i32, ptr %1241, align 4, !tbaa !9
  %1243 = icmp eq i32 %1242, 3
  br i1 %1243, label %1244, label %1245

1244:                                             ; preds = %1240
  br label %1247

1245:                                             ; preds = %1240
  call void @__assert_fail(ptr noundef @.str.42, ptr noundef @.str.4, i32 noundef 2052, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1246:                                             ; No predecessors!
  br label %1247

1247:                                             ; preds = %1246, %1244
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #10
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %1248

1248:                                             ; preds = %1266, %1247
  %1249 = load i32, ptr %61, align 4, !tbaa !9
  %1250 = load ptr, ptr %9, align 8, !tbaa !5
  %1251 = load i32, ptr %1250, align 4, !tbaa !9
  %1252 = icmp slt i32 %1249, %1251
  br i1 %1252, label %1254, label %1253

1253:                                             ; preds = %1248
  store i32 46, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  br label %1275

1254:                                             ; preds = %1248
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #10
  %1255 = load ptr, ptr %42, align 8, !tbaa !5
  %1256 = load i8, ptr %1255, align 1, !tbaa !25
  store i8 %1256, ptr %62, align 1, !tbaa !25
  %1257 = load i8, ptr %62, align 1, !tbaa !25
  %1258 = load ptr, ptr %50, align 8, !tbaa !5
  %1259 = getelementptr inbounds i8, ptr %1258, i64 0
  store i8 %1257, ptr %1259, align 1, !tbaa !25
  %1260 = load i8, ptr %62, align 1, !tbaa !25
  %1261 = load ptr, ptr %50, align 8, !tbaa !5
  %1262 = getelementptr inbounds i8, ptr %1261, i64 1
  store i8 %1260, ptr %1262, align 1, !tbaa !25
  %1263 = load i8, ptr %62, align 1, !tbaa !25
  %1264 = load ptr, ptr %50, align 8, !tbaa !5
  %1265 = getelementptr inbounds i8, ptr %1264, i64 2
  store i8 %1263, ptr %1265, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #10
  br label %1266

1266:                                             ; preds = %1254
  %1267 = load i32, ptr %61, align 4, !tbaa !9
  %1268 = add nsw i32 %1267, 1
  store i32 %1268, ptr %61, align 4, !tbaa !9
  %1269 = load ptr, ptr %42, align 8, !tbaa !5
  %1270 = getelementptr inbounds i8, ptr %1269, i32 1
  store ptr %1270, ptr %42, align 8, !tbaa !5
  %1271 = load i32, ptr %51, align 4, !tbaa !9
  %1272 = load ptr, ptr %50, align 8, !tbaa !5
  %1273 = sext i32 %1271 to i64
  %1274 = getelementptr inbounds i8, ptr %1272, i64 %1273
  store ptr %1274, ptr %50, align 8, !tbaa !5
  br label %1248, !llvm.loop !40

1275:                                             ; preds = %1253
  br label %1276

1276:                                             ; preds = %1275, %1239
  br label %1278

1277:                                             ; preds = %888
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.4, i32 noundef 2063, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #12
  unreachable

1278:                                             ; preds = %1276, %1111, %988, %943
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  store i32 0, ptr %13, align 4
  br label %1279

1279:                                             ; preds = %1278, %836, %829
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  %1280 = load i32, ptr %13, align 4
  switch i32 %1280, label %1285 [
    i32 0, label %1281
  ]

1281:                                             ; preds = %1279
  br label %1282

1282:                                             ; preds = %1281
  %1283 = load i32, ptr %41, align 4, !tbaa !9
  %1284 = add nsw i32 %1283, 1
  store i32 %1284, ptr %41, align 4, !tbaa !9
  br label %676, !llvm.loop !41

1285:                                             ; preds = %1279, %681
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  %1286 = load i32, ptr %13, align 4
  switch i32 %1286, label %1289 [
    i32 16, label %1287
  ]

1287:                                             ; preds = %1285
  %1288 = load ptr, ptr %34, align 8, !tbaa !5
  store ptr %1288, ptr %6, align 8
  store i32 1, ptr %13, align 4
  br label %1289

1289:                                             ; preds = %1287, %1285
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #10
  br label %1291

1290:                                             ; preds = %752, %670
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %1299

1291:                                             ; preds = %1289, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %1292

1292:                                             ; preds = %1291, %632, %605, %515, %436, %352
  call void @llvm.lifetime.end.p0(i64 1024, ptr %22) #10
  br label %1293

1293:                                             ; preds = %1292, %275
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %1294

1294:                                             ; preds = %1293, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  br label %1295

1295:                                             ; preds = %1294, %218, %216, %203, %190, %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  br label %1296

1296:                                             ; preds = %1295, %136, %130, %112, %99, %91
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %1297

1297:                                             ; preds = %1296, %69
  %1298 = load ptr, ptr %6, align 8
  ret ptr %1298

1299:                                             ; preds = %1290
  %1300 = load ptr, ptr %36, align 8
  %1301 = load i32, ptr %37, align 4
  %1302 = insertvalue { ptr, i32 } poison, ptr %1300, 0
  %1303 = insertvalue { ptr, i32 } %1302, i32 %1301, 1
  resume { ptr, i32 } %1303
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu10color_rgbaC2Ev(ptr noundef nonnull align 1 dereferenceable(4)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 1 dereferenceable(4) ptr @_ZN6basisu10color_rgba3setEiiii(ptr noundef nonnull align 1 dereferenceable(4), i32 noundef, i32 noundef, i32 noundef, i32 noundef) #7 align 2

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint 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 #6 = { 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 #7 = { inlinehint 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 #8 = { nounwind allocsize(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 #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { nounwind allocsize(0) }
attributes #12 = { noreturn 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, !7, i64 17}
!12 = !{!"_ZTSN6basisu10tga_headerE", !7, i64 0, !7, i64 1, !7, i64 2, !13, i64 3, !13, i64 5, !7, i64 7, !13, i64 8, !13, i64 10, !13, i64 12, !13, i64 14, !7, i64 16, !7, i64 17}
!13 = !{!"_ZTSN6basisu11packed_uintILj2EEE", !7, i64 0}
!14 = !{!12, !7, i64 1}
!15 = !{!12, !7, i64 7}
!16 = !{!17, !17, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!12, !7, i64 2}
!19 = !{!20, !20, i64 0}
!20 = !{!"_ZTSN6basisu14tga_image_typeE", !7, i64 0}
!21 = !{!12, !7, i64 16}
!22 = !{!12, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!7, !7, i64 0}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}


; 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"

%"class.basisu::color_rgba" = type { %union.anon }
%union.anon = type { [4 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@.str.4 = external hidden unnamed_addr constant [110 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [59 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_ = external hidden unnamed_addr constant [74 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [13 x i8], align 1

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN6basisu7minimumIjEET_S1_S1_(i32 noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local noalias noundef ptr @_ZN6basisu8read_tgaEPKhjRiS2_S2_(ptr noundef %0, i32 noundef %1, ptr nocapture noundef nonnull align 4 dereferenceable(4) %2, ptr nocapture noundef nonnull align 4 dereferenceable(4) %3, ptr nocapture noundef nonnull align 4 dereferenceable(4) %4) local_unnamed_addr #6 personality ptr @__gxx_personality_v0 {
  %6 = alloca [256 x %"class.basisu::color_rgba"], align 16
  %7 = alloca %"class.std::vector", align 8
  %.sroa.0 = alloca i32, align 4
  store i32 0, ptr %2, align 4, !tbaa !5
  store i32 0, ptr %3, align 4, !tbaa !5
  store i32 0, ptr %4, align 4, !tbaa !5
  %8 = icmp ult i32 %1, 19
  br i1 %8, label %558, label %9

9:                                                ; preds = %5
  %10 = getelementptr inbounds i8, ptr %0, i64 12
  %11 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %10)
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %558, label %12

12:                                               ; preds = %9
  %13 = getelementptr inbounds i8, ptr %0, i64 14
  %14 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %13)
  %.not480 = icmp eq i32 %14, 0
  br i1 %.not480, label %558, label %15

15:                                               ; preds = %12
  %16 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %10)
  %17 = icmp ugt i32 %16, 16384
  br i1 %17, label %558, label %18

18:                                               ; preds = %15
  %19 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %13)
  %20 = icmp ugt i32 %19, 16384
  br i1 %20, label %558, label %21

21:                                               ; preds = %18
  %22 = getelementptr inbounds i8, ptr %0, i64 17
  %23 = load i8, ptr %22, align 1, !tbaa !9
  %.not481 = icmp ult i8 %23, 64
  br i1 %.not481, label %24, label %558

24:                                               ; preds = %21
  %25 = getelementptr inbounds i8, ptr %0, i64 1
  %26 = load i8, ptr %25, align 1, !tbaa !12
  %switch = icmp ult i8 %26, 2
  br i1 %switch, label %27, label %558

27:                                               ; preds = %24
  %.not484 = icmp eq i8 %26, 0
  br i1 %.not484, label %35, label %28

28:                                               ; preds = %27
  %29 = getelementptr inbounds i8, ptr %0, i64 7
  %30 = load i8, ptr %29, align 1, !tbaa !13
  %31 = add i8 %30, -33
  %or.cond512 = icmp ult i8 %31, -32
  br i1 %or.cond512, label %558, label %32

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %0, i64 3
  %34 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %33)
  %.not485 = icmp eq i32 %34, 0
  br i1 %.not485, label %._crit_edge687, label %558

._crit_edge687:                                   ; preds = %32
  %.pre = load i8, ptr %22, align 1, !tbaa !9
  br label %35

35:                                               ; preds = %._crit_edge687, %27
  %36 = phi i8 [ %.pre, %._crit_edge687 ], [ %23, %27 ]
  %37 = zext i8 %36 to i32
  %38 = and i32 %37, 16
  %.not486 = icmp eq i32 %38, 0
  %39 = and i32 %37, 32
  %40 = icmp eq i32 %39, 0
  %41 = getelementptr inbounds i8, ptr %0, i64 2
  %42 = load i8, ptr %41, align 1, !tbaa !14
  %43 = zext i8 %42 to i32
  %44 = icmp ugt i8 %42, 8
  %45 = add nsw i32 %43, -8
  %spec.select = select i1 %44, i32 %45, i32 %43
  switch i32 %spec.select, label %558 [
    i32 2, label %46
    i32 1, label %50
    i32 3, label %59
  ]

46:                                               ; preds = %35
  %47 = getelementptr inbounds i8, ptr %0, i64 16
  %48 = load i8, ptr %47, align 1, !tbaa !15
  %49 = icmp eq i8 %48, 8
  br i1 %49, label %558, label %67

50:                                               ; preds = %35
  %51 = getelementptr inbounds i8, ptr %0, i64 16
  %52 = load i8, ptr %51, align 1, !tbaa !15
  %.not491 = icmp eq i8 %52, 8
  br i1 %.not491, label %53, label %558

53:                                               ; preds = %50
  %54 = load i8, ptr %25, align 1, !tbaa !12
  %.not492 = icmp eq i8 %54, 1
  br i1 %.not492, label %55, label %558

55:                                               ; preds = %53
  %56 = getelementptr inbounds i8, ptr %0, i64 5
  %57 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %56)
  %58 = icmp eq i32 %57, 0
  br i1 %58, label %558, label %._crit_edge688

._crit_edge688:                                   ; preds = %55
  %.pre689 = load i8, ptr %51, align 1, !tbaa !15
  br label %67

59:                                               ; preds = %35
  %60 = load i8, ptr %25, align 1, !tbaa !12
  %.not487 = icmp eq i8 %60, 0
  br i1 %.not487, label %61, label %558

61:                                               ; preds = %59
  %62 = getelementptr inbounds i8, ptr %0, i64 5
  %63 = tail call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %62)
  %.not488 = icmp eq i32 %63, 0
  br i1 %.not488, label %64, label %558

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %0, i64 16
  %66 = load i8, ptr %65, align 1, !tbaa !15
  switch i8 %66, label %558 [
    i8 8, label %67
    i8 16, label %67
  ]

67:                                               ; preds = %._crit_edge688, %64, %64, %46
  %68 = phi i8 [ %.pre689, %._crit_edge688 ], [ %66, %64 ], [ %66, %64 ], [ %48, %46 ]
  %69 = getelementptr inbounds i8, ptr %0, i64 16
  switch i8 %68, label %558 [
    i8 32, label %.thread523
    i8 24, label %70
    i8 16, label %.thread
    i8 15, label %.thread
    i8 8, label %74
  ]

70:                                               ; preds = %67
  br label %.thread523

.thread:                                          ; preds = %67, %67
  %71 = icmp eq i32 %spec.select, 3
  %72 = icmp eq i8 %68, 16
  %or.cond582 = and i1 %71, %72
  %73 = select i1 %or.cond582, i32 4, i32 3
  br label %.thread523

74:                                               ; preds = %67
  %75 = icmp eq i32 %spec.select, 1
  br i1 %75, label %76, label %.thread523

76:                                               ; preds = %74
  %77 = getelementptr inbounds i8, ptr %0, i64 7
  %78 = load i8, ptr %77, align 1, !tbaa !13
  %.fr = freeze i8 %78
  %79 = icmp eq i8 %.fr, 32
  %spec.select583 = select i1 %79, i32 4, i32 3
  br label %.thread523

.thread523:                                       ; preds = %74, %76, %67, %.thread, %70
  %.sink = phi i32 [ %73, %.thread ], [ 3, %70 ], [ 4, %67 ], [ 3, %74 ], [ %spec.select583, %76 ]
  %80 = phi i1 [ false, %.thread ], [ false, %70 ], [ false, %67 ], [ true, %74 ], [ true, %76 ]
  %81 = phi i1 [ true, %.thread ], [ false, %70 ], [ false, %67 ], [ false, %74 ], [ false, %76 ]
  %82 = phi i1 [ false, %.thread ], [ true, %70 ], [ false, %67 ], [ false, %74 ], [ false, %76 ]
  %83 = phi i1 [ false, %.thread ], [ false, %70 ], [ true, %67 ], [ false, %74 ], [ false, %76 ]
  %.0381 = phi i32 [ 2, %.thread ], [ 3, %70 ], [ 4, %67 ], [ 1, %74 ], [ 1, %76 ]
  store i32 %.sink, ptr %4, align 4, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %0, i64 18
  %85 = add i32 %1, -18
  %86 = load i8, ptr %0, align 1, !tbaa !16
  %.not493 = icmp eq i8 %86, 0
  br i1 %.not493, label %94, label %87

87:                                               ; preds = %.thread523
  %88 = zext i8 %86 to i32
  %89 = icmp ult i32 %85, %88
  br i1 %89, label %558, label %90

90:                                               ; preds = %87
  %91 = zext i8 %86 to i64
  %92 = getelementptr inbounds i8, ptr %84, i64 %91
  %93 = add i32 %85, %88
  br label %94

94:                                               ; preds = %90, %.thread523
  %.0408 = phi i32 [ %93, %90 ], [ %85, %.thread523 ]
  %.0389 = phi ptr [ %92, %90 ], [ %84, %.thread523 ]
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #9
  br label %95

95:                                               ; preds = %95, %94
  %.idx = phi i64 [ 0, %94 ], [ %.add, %95 ]
  %.ptr = getelementptr inbounds i8, ptr %6, i64 %.idx
  call void @_ZN6basisu10color_rgbaC2Ev(ptr noundef nonnull align 1 dereferenceable(4) %.ptr)
  %.add = add nuw nsw i64 %.idx, 4
  %96 = icmp eq i64 %.add, 1024
  br i1 %96, label %.preheader601, label %95

97:                                               ; preds = %.preheader601
  %98 = load i8, ptr %25, align 1, !tbaa !12
  %.not495 = icmp eq i8 %98, 0
  br i1 %.not495, label %206, label %101

.preheader601:                                    ; preds = %95, %.preheader601
  %indvars.iv = phi i64 [ %indvars.iv.next, %.preheader601 ], [ 0, %95 ]
  %99 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %indvars.iv
  %100 = call noundef nonnull align 1 dereferenceable(4) ptr @_ZN6basisu10color_rgba3setEiiii(ptr noundef nonnull align 1 dereferenceable(4) %99, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 255)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond.not, label %97, label %.preheader601, !llvm.loop !17

101:                                              ; preds = %97
  %102 = getelementptr inbounds i8, ptr %0, i64 5
  %103 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %.not496 = icmp eq i32 %103, 0
  br i1 %.not496, label %206, label %104

104:                                              ; preds = %101
  %105 = icmp eq i32 %spec.select, 1
  %106 = getelementptr inbounds i8, ptr %0, i64 7
  %107 = load i8, ptr %106, align 1, !tbaa !13
  br i1 %105, label %108, label %198

108:                                              ; preds = %104
  switch i8 %107, label %.thread525 [
    i8 32, label %109
    i8 24, label %109
    i8 15, label %109
    i8 16, label %109
  ]

109:                                              ; preds = %108, %108, %108, %108
  %110 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %111 = icmp ugt i32 %110, 256
  br i1 %111, label %.thread525, label %112

112:                                              ; preds = %109
  %113 = load i8, ptr %106, align 1, !tbaa !13
  %114 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  switch i8 %113, label %156 [
    i8 32, label %115
    i8 24, label %130
  ]

115:                                              ; preds = %112
  %116 = shl i32 %114, 2
  %.not504 = icmp ult i32 %.0408, %116
  br i1 %.not504, label %.thread525, label %.preheader599

.preheader599:                                    ; preds = %115
  %117 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %.not653 = icmp eq i32 %117, 0
  br i1 %.not653, label %._crit_edge608, label %.lr.ph607

.lr.ph607:                                        ; preds = %.preheader599, %.lr.ph607
  %indvars.iv669 = phi i64 [ %indvars.iv.next670, %.lr.ph607 ], [ 0, %.preheader599 ]
  %118 = shl i64 %indvars.iv669, 2
  %119 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %indvars.iv669
  %120 = and i64 %118, 4294967292
  %121 = getelementptr inbounds i8, ptr %.0389, i64 %120
  %122 = load <4 x i8>, ptr %121, align 1, !tbaa !19
  %123 = shufflevector <4 x i8> %122, <4 x i8> poison, <4 x i32> <i32 2, i32 1, i32 0, i32 3>
  store <4 x i8> %123, ptr %119, align 4, !tbaa !19
  %indvars.iv.next670 = add nuw nsw i64 %indvars.iv669, 1
  %124 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %125 = zext i32 %124 to i64
  %126 = icmp ult i64 %indvars.iv.next670, %125
  br i1 %126, label %.lr.ph607, label %._crit_edge608, !llvm.loop !20

._crit_edge608:                                   ; preds = %.lr.ph607, %.preheader599
  %127 = sub i32 %.0408, %116
  %128 = zext i32 %116 to i64
  %129 = getelementptr inbounds i8, ptr %.0389, i64 %128
  br label %206

130:                                              ; preds = %112
  %131 = mul i32 %114, 3
  %.not503 = icmp ult i32 %.0408, %131
  br i1 %.not503, label %.thread525, label %.preheader600

.preheader600:                                    ; preds = %130
  %132 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %.not652 = icmp eq i32 %132, 0
  br i1 %.not652, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader600, %.lr.ph
  %indvars.iv666 = phi i64 [ %indvars.iv.next667, %.lr.ph ], [ 0, %.preheader600 ]
  %133 = trunc nuw i64 %indvars.iv666 to i32
  %134 = mul i32 %133, 3
  %135 = add i32 %134, 2
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds i8, ptr %.0389, i64 %136
  %138 = load i8, ptr %137, align 1, !tbaa !19
  %139 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %indvars.iv666
  store i8 %138, ptr %139, align 4, !tbaa !19
  %140 = add i32 %134, 1
  %141 = zext i32 %140 to i64
  %142 = getelementptr inbounds i8, ptr %.0389, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !19
  %144 = getelementptr inbounds i8, ptr %139, i64 1
  store i8 %143, ptr %144, align 1, !tbaa !19
  %145 = zext i32 %134 to i64
  %146 = getelementptr inbounds i8, ptr %.0389, i64 %145
  %147 = load i8, ptr %146, align 1, !tbaa !19
  %148 = getelementptr inbounds i8, ptr %139, i64 2
  store i8 %147, ptr %148, align 2, !tbaa !19
  %149 = getelementptr inbounds i8, ptr %139, i64 3
  store i8 -1, ptr %149, align 1, !tbaa !19
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %150 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %151 = zext i32 %150 to i64
  %152 = icmp ult i64 %indvars.iv.next667, %151
  br i1 %152, label %.lr.ph, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %.preheader600
  %153 = sub i32 %.0408, %131
  %154 = zext i32 %131 to i64
  %155 = getelementptr inbounds i8, ptr %.0389, i64 %154
  br label %206

156:                                              ; preds = %112
  %157 = shl i32 %114, 1
  %.not502 = icmp ult i32 %.0408, %157
  br i1 %.not502, label %.thread525, label %.preheader598

.preheader598:                                    ; preds = %156
  %158 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %.not654 = icmp eq i32 %158, 0
  br i1 %.not654, label %._crit_edge611, label %.lr.ph610

.lr.ph610:                                        ; preds = %.preheader598, %.lr.ph610
  %indvars.iv672 = phi i64 [ %indvars.iv.next673, %.lr.ph610 ], [ 0, %.preheader598 ]
  %159 = trunc nuw i64 %indvars.iv672 to i32
  %160 = shl i32 %159, 1
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds i8, ptr %.0389, i64 %161
  %163 = load i8, ptr %162, align 1, !tbaa !19
  %164 = zext i8 %163 to i16
  %165 = or disjoint i32 %160, 1
  %166 = zext i32 %165 to i64
  %167 = getelementptr inbounds i8, ptr %.0389, i64 %166
  %168 = load i8, ptr %167, align 1, !tbaa !19
  %169 = zext i8 %168 to i16
  %170 = shl nuw i16 %169, 8
  %171 = or disjoint i16 %170, %164
  %172 = lshr i8 %168, 2
  %173 = and i8 %172, 31
  %174 = zext nneg i8 %173 to i16
  %175 = mul nuw nsw i16 %174, 255
  %.lhs.trunc576 = add nuw nsw i16 %175, 15
  %176 = udiv i16 %.lhs.trunc576, 31
  %177 = trunc nuw i16 %176 to i8
  %178 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %indvars.iv672
  store i8 %177, ptr %178, align 4, !tbaa !19
  %179 = lshr i16 %171, 5
  %180 = and i16 %179, 31
  %181 = mul nuw nsw i16 %180, 255
  %.lhs.trunc578 = add nuw nsw i16 %181, 15
  %182 = udiv i16 %.lhs.trunc578, 31
  %183 = trunc nuw i16 %182 to i8
  %184 = getelementptr inbounds i8, ptr %178, i64 1
  store i8 %183, ptr %184, align 1, !tbaa !19
  %185 = and i8 %163, 31
  %186 = zext nneg i8 %185 to i16
  %187 = mul nuw nsw i16 %186, 255
  %.lhs.trunc580 = add nuw nsw i16 %187, 15
  %188 = udiv i16 %.lhs.trunc580, 31
  %189 = trunc nuw i16 %188 to i8
  %190 = getelementptr inbounds i8, ptr %178, i64 2
  store i8 %189, ptr %190, align 2, !tbaa !19
  %191 = getelementptr inbounds i8, ptr %178, i64 3
  store i8 -1, ptr %191, align 1, !tbaa !19
  %indvars.iv.next673 = add nuw nsw i64 %indvars.iv672, 1
  %192 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %193 = zext i32 %192 to i64
  %194 = icmp ult i64 %indvars.iv.next673, %193
  br i1 %194, label %.lr.ph610, label %._crit_edge611, !llvm.loop !22

._crit_edge611:                                   ; preds = %.lr.ph610, %.preheader598
  %195 = sub i32 %.0408, %157
  %196 = zext i32 %157 to i64
  %197 = getelementptr inbounds i8, ptr %.0389, i64 %196
  br label %206

198:                                              ; preds = %104
  %199 = lshr i8 %107, 3
  %200 = zext nneg i8 %199 to i32
  %201 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %102)
  %202 = mul i32 %201, %200
  %.not497 = icmp ult i32 %.0408, %202
  %203 = zext i32 %202 to i64
  %204 = getelementptr inbounds i8, ptr %.0389, i64 %203
  %205 = add i32 %202, %.0408
  br i1 %.not497, label %.thread525, label %206

206:                                              ; preds = %._crit_edge611, %._crit_edge608, %._crit_edge, %198, %101, %97
  %.5413 = phi i32 [ %127, %._crit_edge608 ], [ %153, %._crit_edge ], [ %195, %._crit_edge611 ], [ %205, %198 ], [ %.0408, %101 ], [ %.0408, %97 ]
  %.5394 = phi ptr [ %129, %._crit_edge608 ], [ %155, %._crit_edge ], [ %197, %._crit_edge611 ], [ %204, %198 ], [ %.0389, %101 ], [ %.0389, %97 ]
  %207 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %10)
  store i32 %207, ptr %2, align 4, !tbaa !5
  %208 = call noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2) %13)
  store i32 %208, ptr %3, align 4, !tbaa !5
  %209 = load i32, ptr %2, align 4, !tbaa !5
  %210 = mul i32 %209, %.0381
  %211 = load i32, ptr %4, align 4, !tbaa !5
  %212 = mul nsw i32 %211, %209
  %213 = mul i32 %212, %208
  %214 = zext i32 %213 to i64
  %215 = call noalias ptr @malloc(i64 noundef %214) #10
  %.not505 = icmp eq ptr %215, null
  br i1 %.not505, label %.thread525, label %216

216:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  br i1 %44, label %217, label %221

217:                                              ; preds = %216
  %218 = zext i32 %210 to i64
  invoke void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %218)
          to label %221 unwind label %219

219:                                              ; preds = %217
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #9
  resume { ptr, i32 } %220

221:                                              ; preds = %217, %216
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %.sroa.0)
  store i32 0, ptr %.sroa.0, align 4
  %222 = load i32, ptr %3, align 4
  %.not511644 = icmp sgt i32 %222, 0
  br i1 %.not511644, label %.lr.ph651, label %.thread552

.lr.ph651:                                        ; preds = %221
  %223 = zext i32 %210 to i64
  %224 = zext nneg i32 %.0381 to i64
  %225 = icmp eq i32 %spec.select, 1
  %226 = getelementptr inbounds i8, ptr %0, i64 7
  %227 = icmp eq i32 %spec.select, 2
  %228 = icmp eq i32 %spec.select, 3
  %or.cond = and i1 %228, %81
  %.sroa.0.1.sroa_idx746 = getelementptr inbounds i8, ptr %.sroa.0, i64 1
  %.sroa.0.2.sroa_idx747 = getelementptr inbounds i8, ptr %.sroa.0, i64 2
  %.sroa.0.3.sroa_idx748 = getelementptr inbounds i8, ptr %.sroa.0, i64 3
  br label %229

229:                                              ; preds = %.lr.ph651, %.loopexit
  %230 = phi i32 [ %222, %.lr.ph651 ], [ %286, %.loopexit ]
  %.6395649 = phi ptr [ %.5394, %.lr.ph651 ], [ %.15404, %.loopexit ]
  %.6414648 = phi i32 [ %.5413, %.lr.ph651 ], [ %.15423, %.loopexit ]
  %.0445647 = phi i32 [ 0, %.lr.ph651 ], [ %557, %.loopexit ]
  %.0446646 = phi i32 [ 0, %.lr.ph651 ], [ %.4450, %.loopexit ]
  %.0452645 = phi i32 [ 0, %.lr.ph651 ], [ %.4456, %.loopexit ]
  br i1 %44, label %231, label %280

231:                                              ; preds = %229
  %232 = load i32, ptr %2, align 4, !tbaa !5
  %233 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #9
  br label %234

234:                                              ; preds = %.thread538, %231
  %.1453 = phi i32 [ %.0452645, %231 ], [ %.2454, %.thread538 ]
  %.1447 = phi i32 [ %.0446646, %231 ], [ %252, %.thread538 ]
  %.0432 = phi i32 [ %232, %231 ], [ %251, %.thread538 ]
  %.0426 = phi ptr [ %233, %231 ], [ %.5431543, %.thread538 ]
  %.7415 = phi i32 [ %.6414648, %231 ], [ %.13421544, %.thread538 ]
  %.7396 = phi ptr [ %.6395649, %231 ], [ %.13402545, %.thread538 ]
  %.not506 = icmp eq i32 %.1447, 0
  br i1 %.not506, label %235, label %.thread534

235:                                              ; preds = %234
  %236 = icmp eq i32 %.7415, 0
  br i1 %236, label %.thread552.sink.split, label %237

237:                                              ; preds = %235
  %238 = getelementptr inbounds i8, ptr %.7396, i64 1
  %239 = load i8, ptr %.7396, align 1, !tbaa !19
  %240 = zext i8 %239 to i32
  %241 = add i32 %.7415, -1
  %242 = and i32 %240, 128
  %243 = and i32 %240, 127
  %244 = add nuw nsw i32 %243, 1
  %.not507 = icmp eq i32 %242, 0
  br i1 %.not507, label %.thread534, label %245

245:                                              ; preds = %237
  %246 = icmp ult i32 %241, %.0381
  br i1 %246, label %.thread552.sink.split, label %247

247:                                              ; preds = %245
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %.sroa.0, ptr noundef nonnull align 1 dereferenceable(1) %238, i64 %224, i1 false)
  %248 = getelementptr inbounds i8, ptr %238, i64 %224
  %249 = sub i32 %241, %.0381
  br label %.thread534

.thread534:                                       ; preds = %237, %247, %234
  %.2454 = phi i32 [ %.1453, %234 ], [ %242, %247 ], [ 0, %237 ]
  %.2448 = phi i32 [ %.1447, %234 ], [ %244, %247 ], [ %244, %237 ]
  %.10418 = phi i32 [ %.7415, %234 ], [ %249, %247 ], [ %241, %237 ]
  %.10399 = phi ptr [ %.7396, %234 ], [ %248, %247 ], [ %238, %237 ]
  %250 = call noundef i32 @_ZN6basisu7minimumIjEET_S1_S1_(i32 noundef %.0432, i32 noundef %.2448)
  %251 = sub i32 %.0432, %250
  %252 = sub i32 %.2448, %250
  %.not508 = icmp eq i32 %.2454, 0
  br i1 %.not508, label %262, label %.preheader584

.preheader584:                                    ; preds = %.thread534
  %.not655 = icmp eq i32 %250, 0
  br i1 %.not655, label %.thread538, label %.preheader

.preheader:                                       ; preds = %.preheader584, %254
  %.0407615 = phi i32 [ %255, %254 ], [ 0, %.preheader584 ]
  %.1427614 = phi ptr [ %.lcssa, %254 ], [ %.0426, %.preheader584 ]
  %.sroa.0.0..sroa.0.0. = load i8, ptr %.sroa.0, align 4, !tbaa !19
  %253 = getelementptr inbounds i8, ptr %.1427614, i64 1
  store i8 %.sroa.0.0..sroa.0.0., ptr %.1427614, align 1, !tbaa !19
  br i1 %80, label %254, label %256, !llvm.loop !23

254:                                              ; preds = %260, %258, %256, %.preheader
  %.lcssa = phi ptr [ %253, %.preheader ], [ %257, %256 ], [ %259, %258 ], [ %261, %260 ]
  %255 = add nuw i32 %.0407615, 1
  %exitcond679.not = icmp eq i32 %255, %250
  br i1 %exitcond679.not, label %.thread538, label %.preheader, !llvm.loop !24

256:                                              ; preds = %.preheader
  %.sroa.0.1..sroa.0.1. = load i8, ptr %.sroa.0.1.sroa_idx746, align 1, !tbaa !19
  %257 = getelementptr inbounds i8, ptr %.1427614, i64 2
  store i8 %.sroa.0.1..sroa.0.1., ptr %253, align 1, !tbaa !19
  br i1 %81, label %254, label %258, !llvm.loop !23

258:                                              ; preds = %256
  %.sroa.0.2..sroa.0.2. = load i8, ptr %.sroa.0.2.sroa_idx747, align 2, !tbaa !19
  %259 = getelementptr inbounds i8, ptr %.1427614, i64 3
  store i8 %.sroa.0.2..sroa.0.2., ptr %257, align 1, !tbaa !19
  br i1 %82, label %254, label %260, !llvm.loop !23

260:                                              ; preds = %258
  %.sroa.0.3..sroa.0.3. = load i8, ptr %.sroa.0.3.sroa_idx748, align 1, !tbaa !19
  %261 = getelementptr inbounds i8, ptr %.1427614, i64 4
  store i8 %.sroa.0.3..sroa.0.3., ptr %259, align 1, !tbaa !19
  br label %254

262:                                              ; preds = %.thread534
  %263 = mul i32 %250, %.0381
  %.not509 = icmp ult i32 %.10418, %263
  br i1 %.not509, label %.thread552.sink.split, label %.thread546

.thread546:                                       ; preds = %262
  %264 = zext i32 %263 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0426, ptr align 1 %.10399, i64 %264, i1 false)
  %265 = getelementptr inbounds i8, ptr %.0426, i64 %264
  %266 = getelementptr inbounds i8, ptr %.10399, i64 %264
  %267 = sub i32 %.10418, %263
  br label %.thread538

.thread538:                                       ; preds = %254, %.preheader584, %.thread546
  %.13402545 = phi ptr [ %266, %.thread546 ], [ %.10399, %.preheader584 ], [ %.10399, %254 ]
  %.13421544 = phi i32 [ %267, %.thread546 ], [ %.10418, %.preheader584 ], [ %.10418, %254 ]
  %.5431543 = phi ptr [ %265, %.thread546 ], [ %.0426, %.preheader584 ], [ %.lcssa, %254 ]
  %.not510 = icmp eq i32 %251, 0
  br i1 %.not510, label %268, label %234, !llvm.loop !25

268:                                              ; preds = %.thread538
  %269 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #9
  %270 = ptrtoint ptr %.5431543 to i64
  %271 = ptrtoint ptr %269 to i64
  %272 = sub i64 %270, %271
  %273 = load i32, ptr %2, align 4, !tbaa !5
  %274 = mul i32 %273, %.0381
  %275 = zext i32 %274 to i64
  %276 = icmp eq i64 %272, %275
  br i1 %276, label %278, label %277

277:                                              ; preds = %268
  call void @__assert_fail(ptr noundef nonnull @.str.35, ptr noundef nonnull @.str.4, i32 noundef 1955, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

278:                                              ; preds = %268
  %279 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #9
  %.pre690 = load i32, ptr %3, align 4
  br label %285

280:                                              ; preds = %229
  %281 = icmp ult i32 %.6414648, %210
  br i1 %281, label %.thread552.sink.split, label %282

282:                                              ; preds = %280
  %283 = sub i32 %.6414648, %210
  %284 = getelementptr inbounds i8, ptr %.6395649, i64 %223
  br label %285

285:                                              ; preds = %278, %282
  %286 = phi i32 [ %.pre690, %278 ], [ %230, %282 ]
  %.4456 = phi i32 [ %.2454, %278 ], [ %.0452645, %282 ]
  %.4450 = phi i32 [ %252, %278 ], [ %.0446646, %282 ]
  %.2435 = phi ptr [ %279, %278 ], [ %.6395649, %282 ]
  %.15423 = phi i32 [ %.13421544, %278 ], [ %283, %282 ]
  %.15404 = phi ptr [ %.13402545, %278 ], [ %284, %282 ]
  %287 = xor i32 %.0445647, -1
  %288 = add i32 %286, %287
  %289 = select i1 %40, i32 %288, i32 %.0445647
  %290 = mul i32 %289, %212
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds i8, ptr %215, i64 %291
  %293 = load i32, ptr %2, align 4
  %294 = add i32 %293, -1
  %295 = load i32, ptr %4, align 4
  %296 = mul nsw i32 %294, %295
  %297 = select i1 %.not486, i32 0, i32 %296
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i8, ptr %292, i64 %298
  %300 = sub nsw i32 0, %295
  %301 = select i1 %.not486, i32 %295, i32 %300
  %302 = load i8, ptr %69, align 1, !tbaa !15
  switch i8 %302, label %511 [
    i8 32, label %303
    i8 24, label %333
    i8 16, label %357
    i8 15, label %357
    i8 8, label %415
  ]

303:                                              ; preds = %285
  %304 = icmp eq i32 %295, 4
  %or.cond514 = select i1 %83, i1 %304, i1 false
  br i1 %or.cond514, label %.preheader585, label %.critedge

.preheader585:                                    ; preds = %303
  %305 = icmp sgt i32 %293, 0
  br i1 %305, label %.lr.ph643, label %.loopexit

.lr.ph643:                                        ; preds = %.preheader585
  %306 = sext i32 %301 to i64
  %xtraiter741 = and i32 %293, 1
  %307 = icmp eq i32 %294, 0
  br i1 %307, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph643.new

.lr.ph643.new:                                    ; preds = %.lr.ph643
  %unroll_iter744 = and i32 %293, 2147483646
  br label %308

.critedge:                                        ; preds = %303
  call void @__assert_fail(ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.4, i32 noundef 1979, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

308:                                              ; preds = %308, %.lr.ph643.new
  %.0382641 = phi ptr [ %299, %.lr.ph643.new ], [ %332, %308 ]
  %.3436640 = phi ptr [ %.2435, %.lr.ph643.new ], [ %331, %308 ]
  %niter745 = phi i32 [ 0, %.lr.ph643.new ], [ %niter745.next.1, %308 ]
  %309 = getelementptr inbounds i8, ptr %.3436640, i64 2
  %310 = load i8, ptr %309, align 1, !tbaa !19
  store i8 %310, ptr %.0382641, align 1, !tbaa !19
  %311 = getelementptr inbounds i8, ptr %.3436640, i64 1
  %312 = load i8, ptr %311, align 1, !tbaa !19
  %313 = getelementptr inbounds i8, ptr %.0382641, i64 1
  store i8 %312, ptr %313, align 1, !tbaa !19
  %314 = load i8, ptr %.3436640, align 1, !tbaa !19
  %315 = getelementptr inbounds i8, ptr %.0382641, i64 2
  store i8 %314, ptr %315, align 1, !tbaa !19
  %316 = getelementptr inbounds i8, ptr %.3436640, i64 3
  %317 = load i8, ptr %316, align 1, !tbaa !19
  %318 = getelementptr inbounds i8, ptr %.0382641, i64 3
  store i8 %317, ptr %318, align 1, !tbaa !19
  %319 = getelementptr inbounds i8, ptr %.3436640, i64 4
  %320 = getelementptr inbounds i8, ptr %.0382641, i64 %306
  %321 = getelementptr inbounds i8, ptr %.3436640, i64 6
  %322 = load i8, ptr %321, align 1, !tbaa !19
  store i8 %322, ptr %320, align 1, !tbaa !19
  %323 = getelementptr inbounds i8, ptr %.3436640, i64 5
  %324 = load i8, ptr %323, align 1, !tbaa !19
  %325 = getelementptr inbounds i8, ptr %320, i64 1
  store i8 %324, ptr %325, align 1, !tbaa !19
  %326 = load i8, ptr %319, align 1, !tbaa !19
  %327 = getelementptr inbounds i8, ptr %320, i64 2
  store i8 %326, ptr %327, align 1, !tbaa !19
  %328 = getelementptr inbounds i8, ptr %.3436640, i64 7
  %329 = load i8, ptr %328, align 1, !tbaa !19
  %330 = getelementptr inbounds i8, ptr %320, i64 3
  store i8 %329, ptr %330, align 1, !tbaa !19
  %331 = getelementptr inbounds i8, ptr %.3436640, i64 8
  %332 = getelementptr inbounds i8, ptr %320, i64 %306
  %niter745.next.1 = add i32 %niter745, 2
  %niter745.ncmp.1 = icmp eq i32 %niter745.next.1, %unroll_iter744
  br i1 %niter745.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %308, !llvm.loop !26

333:                                              ; preds = %285
  %334 = icmp eq i32 %295, 3
  %or.cond516 = select i1 %82, i1 %334, i1 false
  br i1 %or.cond516, label %.preheader586, label %.critedge11

.preheader586:                                    ; preds = %333
  %335 = icmp sgt i32 %293, 0
  br i1 %335, label %.lr.ph639, label %.loopexit

.lr.ph639:                                        ; preds = %.preheader586
  %336 = sext i32 %301 to i64
  %xtraiter735 = and i32 %293, 1
  %337 = icmp eq i32 %294, 0
  br i1 %337, label %.loopexit.loopexit708.unr-lcssa, label %.lr.ph639.new

.lr.ph639.new:                                    ; preds = %.lr.ph639
  %unroll_iter738 = and i32 %293, 2147483646
  br label %338

.critedge11:                                      ; preds = %333
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.4, i32 noundef 1989, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

338:                                              ; preds = %338, %.lr.ph639.new
  %.1383637 = phi ptr [ %299, %.lr.ph639.new ], [ %356, %338 ]
  %.4437636 = phi ptr [ %.2435, %.lr.ph639.new ], [ %355, %338 ]
  %niter739 = phi i32 [ 0, %.lr.ph639.new ], [ %niter739.next.1, %338 ]
  %339 = getelementptr inbounds i8, ptr %.4437636, i64 2
  %340 = load i8, ptr %339, align 1, !tbaa !19
  store i8 %340, ptr %.1383637, align 1, !tbaa !19
  %341 = getelementptr inbounds i8, ptr %.4437636, i64 1
  %342 = load i8, ptr %341, align 1, !tbaa !19
  %343 = getelementptr inbounds i8, ptr %.1383637, i64 1
  store i8 %342, ptr %343, align 1, !tbaa !19
  %344 = load i8, ptr %.4437636, align 1, !tbaa !19
  %345 = getelementptr inbounds i8, ptr %.1383637, i64 2
  store i8 %344, ptr %345, align 1, !tbaa !19
  %346 = getelementptr inbounds i8, ptr %.4437636, i64 3
  %347 = getelementptr inbounds i8, ptr %.1383637, i64 %336
  %348 = getelementptr inbounds i8, ptr %.4437636, i64 5
  %349 = load i8, ptr %348, align 1, !tbaa !19
  store i8 %349, ptr %347, align 1, !tbaa !19
  %350 = getelementptr inbounds i8, ptr %.4437636, i64 4
  %351 = load i8, ptr %350, align 1, !tbaa !19
  %352 = getelementptr inbounds i8, ptr %347, i64 1
  store i8 %351, ptr %352, align 1, !tbaa !19
  %353 = load i8, ptr %346, align 1, !tbaa !19
  %354 = getelementptr inbounds i8, ptr %347, i64 2
  store i8 %353, ptr %354, align 1, !tbaa !19
  %355 = getelementptr inbounds i8, ptr %.4437636, i64 6
  %356 = getelementptr inbounds i8, ptr %347, i64 %336
  %niter739.next.1 = add i32 %niter739, 2
  %niter739.ncmp.1 = icmp eq i32 %niter739.next.1, %unroll_iter738
  br i1 %niter739.ncmp.1, label %.loopexit.loopexit708.unr-lcssa, label %338, !llvm.loop !27

357:                                              ; preds = %285, %285
  br i1 %227, label %358, label %391

358:                                              ; preds = %357
  %359 = icmp eq i32 %295, 3
  %or.cond518 = select i1 %81, i1 %359, i1 false
  br i1 %or.cond518, label %.preheader588, label %.critedge13

.preheader588:                                    ; preds = %358
  %360 = icmp sgt i32 %293, 0
  br i1 %360, label %.lr.ph635, label %.loopexit

.lr.ph635:                                        ; preds = %.preheader588
  %361 = sext i32 %301 to i64
  br label %362

.critedge13:                                      ; preds = %358
  call void @__assert_fail(ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.4, i32 noundef 2001, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

362:                                              ; preds = %.lr.ph635, %362
  %.0378634 = phi i32 [ 0, %.lr.ph635 ], [ %388, %362 ]
  %.2384633 = phi ptr [ %299, %.lr.ph635 ], [ %390, %362 ]
  %.5438632 = phi ptr [ %.2435, %.lr.ph635 ], [ %389, %362 ]
  %363 = load i8, ptr %.5438632, align 1, !tbaa !19
  %364 = zext i8 %363 to i16
  %365 = getelementptr inbounds i8, ptr %.5438632, i64 1
  %366 = load i8, ptr %365, align 1, !tbaa !19
  %367 = zext i8 %366 to i16
  %368 = shl nuw i16 %367, 8
  %369 = or disjoint i16 %368, %364
  %370 = lshr i8 %366, 2
  %371 = and i8 %370, 31
  %372 = zext nneg i8 %371 to i16
  %373 = mul nuw nsw i16 %372, 255
  %.lhs.trunc = add nuw nsw i16 %373, 15
  %374 = udiv i16 %.lhs.trunc, 31
  %375 = trunc nuw i16 %374 to i8
  store i8 %375, ptr %.2384633, align 1, !tbaa !19
  %376 = lshr i16 %369, 5
  %377 = and i16 %376, 31
  %378 = mul nuw nsw i16 %377, 255
  %.lhs.trunc572 = add nuw nsw i16 %378, 15
  %379 = udiv i16 %.lhs.trunc572, 31
  %380 = trunc nuw i16 %379 to i8
  %381 = getelementptr inbounds i8, ptr %.2384633, i64 1
  store i8 %380, ptr %381, align 1, !tbaa !19
  %382 = and i8 %363, 31
  %383 = zext nneg i8 %382 to i16
  %384 = mul nuw nsw i16 %383, 255
  %.lhs.trunc574 = add nuw nsw i16 %384, 15
  %385 = udiv i16 %.lhs.trunc574, 31
  %386 = trunc nuw i16 %385 to i8
  %387 = getelementptr inbounds i8, ptr %.2384633, i64 2
  store i8 %386, ptr %387, align 1, !tbaa !19
  %388 = add nuw nsw i32 %.0378634, 1
  %389 = getelementptr inbounds i8, ptr %.5438632, i64 2
  %390 = getelementptr inbounds i8, ptr %.2384633, i64 %361
  %exitcond684.not = icmp eq i32 %388, %293
  br i1 %exitcond684.not, label %.loopexit, label %362, !llvm.loop !28

391:                                              ; preds = %357
  %392 = icmp eq i32 %295, 4
  %or.cond520 = select i1 %or.cond, i1 %392, i1 false
  br i1 %or.cond520, label %.preheader590, label %.critedge16

.preheader590:                                    ; preds = %391
  %393 = icmp sgt i32 %293, 0
  br i1 %393, label %.lr.ph631, label %.loopexit

.lr.ph631:                                        ; preds = %.preheader590
  %394 = sext i32 %301 to i64
  %xtraiter729 = and i32 %293, 1
  %395 = icmp eq i32 %294, 0
  br i1 %395, label %.loopexit.loopexit710.unr-lcssa, label %.lr.ph631.new

.lr.ph631.new:                                    ; preds = %.lr.ph631
  %unroll_iter732 = and i32 %293, 2147483646
  br label %396

.critedge16:                                      ; preds = %391
  call void @__assert_fail(ptr noundef nonnull @.str.39, ptr noundef nonnull @.str.4, i32 noundef 2012, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

396:                                              ; preds = %396, %.lr.ph631.new
  %.3385629 = phi ptr [ %299, %.lr.ph631.new ], [ %414, %396 ]
  %.6439628 = phi ptr [ %.2435, %.lr.ph631.new ], [ %413, %396 ]
  %niter733 = phi i32 [ 0, %.lr.ph631.new ], [ %niter733.next.1, %396 ]
  %397 = load i8, ptr %.6439628, align 1, !tbaa !19
  store i8 %397, ptr %.3385629, align 1, !tbaa !19
  %398 = getelementptr inbounds i8, ptr %.3385629, i64 1
  store i8 %397, ptr %398, align 1, !tbaa !19
  %399 = load i8, ptr %.6439628, align 1, !tbaa !19
  %400 = getelementptr inbounds i8, ptr %.3385629, i64 2
  store i8 %399, ptr %400, align 1, !tbaa !19
  %401 = getelementptr inbounds i8, ptr %.6439628, i64 1
  %402 = load i8, ptr %401, align 1, !tbaa !19
  %403 = getelementptr inbounds i8, ptr %.3385629, i64 3
  store i8 %402, ptr %403, align 1, !tbaa !19
  %404 = getelementptr inbounds i8, ptr %.6439628, i64 2
  %405 = getelementptr inbounds i8, ptr %.3385629, i64 %394
  %406 = load i8, ptr %404, align 1, !tbaa !19
  store i8 %406, ptr %405, align 1, !tbaa !19
  %407 = getelementptr inbounds i8, ptr %405, i64 1
  store i8 %406, ptr %407, align 1, !tbaa !19
  %408 = load i8, ptr %404, align 1, !tbaa !19
  %409 = getelementptr inbounds i8, ptr %405, i64 2
  store i8 %408, ptr %409, align 1, !tbaa !19
  %410 = getelementptr inbounds i8, ptr %.6439628, i64 3
  %411 = load i8, ptr %410, align 1, !tbaa !19
  %412 = getelementptr inbounds i8, ptr %405, i64 3
  store i8 %411, ptr %412, align 1, !tbaa !19
  %413 = getelementptr inbounds i8, ptr %.6439628, i64 4
  %414 = getelementptr inbounds i8, ptr %405, i64 %394
  %niter733.next.1 = add i32 %niter733, 2
  %niter733.ncmp.1 = icmp eq i32 %niter733.next.1, %unroll_iter732
  br i1 %niter733.ncmp.1, label %.loopexit.loopexit710.unr-lcssa, label %396, !llvm.loop !29

415:                                              ; preds = %285
  br i1 %80, label %417, label %416

416:                                              ; preds = %415
  call void @__assert_fail(ptr noundef nonnull @.str.40, ptr noundef nonnull @.str.4, i32 noundef 2023, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

417:                                              ; preds = %415
  br i1 %225, label %418, label %483

418:                                              ; preds = %417
  %419 = load i8, ptr %226, align 1, !tbaa !13
  %420 = icmp eq i8 %419, 32
  br i1 %420, label %421, label %452

421:                                              ; preds = %418
  %422 = icmp eq i32 %295, 4
  br i1 %422, label %.preheader592, label %426

.preheader592:                                    ; preds = %421
  %423 = icmp sgt i32 %293, 0
  br i1 %423, label %.lr.ph627, label %.loopexit

.lr.ph627:                                        ; preds = %.preheader592
  %424 = sext i32 %301 to i64
  %xtraiter723 = and i32 %293, 3
  %425 = icmp ult i32 %293, 4
  br i1 %425, label %.loopexit.loopexit711.unr-lcssa, label %.lr.ph627.new

.lr.ph627.new:                                    ; preds = %.lr.ph627
  %unroll_iter726 = and i32 %293, 2147483644
  br label %427

426:                                              ; preds = %421
  call void @__assert_fail(ptr noundef nonnull @.str.41, ptr noundef nonnull @.str.4, i32 noundef 2028, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

427:                                              ; preds = %427, %.lr.ph627.new
  %.4386625 = phi ptr [ %299, %.lr.ph627.new ], [ %451, %427 ]
  %.7440624 = phi ptr [ %.2435, %.lr.ph627.new ], [ %450, %427 ]
  %niter727 = phi i32 [ 0, %.lr.ph627.new ], [ %niter727.next.3, %427 ]
  %428 = load i8, ptr %.7440624, align 1, !tbaa !19
  %429 = zext i8 %428 to i64
  %430 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %429
  %431 = load <4 x i8>, ptr %430, align 4, !tbaa !19
  store <4 x i8> %431, ptr %.4386625, align 1, !tbaa !19
  %432 = getelementptr inbounds i8, ptr %.7440624, i64 1
  %433 = getelementptr inbounds i8, ptr %.4386625, i64 %424
  %434 = load i8, ptr %432, align 1, !tbaa !19
  %435 = zext i8 %434 to i64
  %436 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %435
  %437 = load <4 x i8>, ptr %436, align 4, !tbaa !19
  store <4 x i8> %437, ptr %433, align 1, !tbaa !19
  %438 = getelementptr inbounds i8, ptr %.7440624, i64 2
  %439 = getelementptr inbounds i8, ptr %433, i64 %424
  %440 = load i8, ptr %438, align 1, !tbaa !19
  %441 = zext i8 %440 to i64
  %442 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %441
  %443 = load <4 x i8>, ptr %442, align 4, !tbaa !19
  store <4 x i8> %443, ptr %439, align 1, !tbaa !19
  %444 = getelementptr inbounds i8, ptr %.7440624, i64 3
  %445 = getelementptr inbounds i8, ptr %439, i64 %424
  %446 = load i8, ptr %444, align 1, !tbaa !19
  %447 = zext i8 %446 to i64
  %448 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %447
  %449 = load <4 x i8>, ptr %448, align 4, !tbaa !19
  store <4 x i8> %449, ptr %445, align 1, !tbaa !19
  %450 = getelementptr inbounds i8, ptr %.7440624, i64 4
  %451 = getelementptr inbounds i8, ptr %445, i64 %424
  %niter727.next.3 = add i32 %niter727, 4
  %niter727.ncmp.3 = icmp eq i32 %niter727.next.3, %unroll_iter726
  br i1 %niter727.ncmp.3, label %.loopexit.loopexit711.unr-lcssa, label %427, !llvm.loop !30

452:                                              ; preds = %418
  %453 = icmp eq i32 %295, 3
  br i1 %453, label %.preheader594, label %457

.preheader594:                                    ; preds = %452
  %454 = icmp sgt i32 %293, 0
  br i1 %454, label %.lr.ph623, label %.loopexit

.lr.ph623:                                        ; preds = %.preheader594
  %455 = sext i32 %301 to i64
  %xtraiter717 = and i32 %293, 1
  %456 = icmp eq i32 %294, 0
  br i1 %456, label %.loopexit.loopexit712.unr-lcssa, label %.lr.ph623.new

.lr.ph623.new:                                    ; preds = %.lr.ph623
  %unroll_iter720 = and i32 %293, 2147483646
  br label %458

457:                                              ; preds = %452
  call void @__assert_fail(ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.4, i32 noundef 2040, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

458:                                              ; preds = %458, %.lr.ph623.new
  %.5387621 = phi ptr [ %299, %.lr.ph623.new ], [ %482, %458 ]
  %.8441620 = phi ptr [ %.2435, %.lr.ph623.new ], [ %481, %458 ]
  %niter721 = phi i32 [ 0, %.lr.ph623.new ], [ %niter721.next.1, %458 ]
  %459 = load i8, ptr %.8441620, align 1, !tbaa !19
  %460 = zext i8 %459 to i64
  %461 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %460
  %462 = load i8, ptr %461, align 4, !tbaa !19
  store i8 %462, ptr %.5387621, align 1, !tbaa !19
  %463 = getelementptr inbounds i8, ptr %461, i64 1
  %464 = load i8, ptr %463, align 1, !tbaa !19
  %465 = getelementptr inbounds i8, ptr %.5387621, i64 1
  store i8 %464, ptr %465, align 1, !tbaa !19
  %466 = getelementptr inbounds i8, ptr %461, i64 2
  %467 = load i8, ptr %466, align 2, !tbaa !19
  %468 = getelementptr inbounds i8, ptr %.5387621, i64 2
  store i8 %467, ptr %468, align 1, !tbaa !19
  %469 = getelementptr inbounds i8, ptr %.8441620, i64 1
  %470 = getelementptr inbounds i8, ptr %.5387621, i64 %455
  %471 = load i8, ptr %469, align 1, !tbaa !19
  %472 = zext i8 %471 to i64
  %473 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %472
  %474 = load i8, ptr %473, align 4, !tbaa !19
  store i8 %474, ptr %470, align 1, !tbaa !19
  %475 = getelementptr inbounds i8, ptr %473, i64 1
  %476 = load i8, ptr %475, align 1, !tbaa !19
  %477 = getelementptr inbounds i8, ptr %470, i64 1
  store i8 %476, ptr %477, align 1, !tbaa !19
  %478 = getelementptr inbounds i8, ptr %473, i64 2
  %479 = load i8, ptr %478, align 2, !tbaa !19
  %480 = getelementptr inbounds i8, ptr %470, i64 2
  store i8 %479, ptr %480, align 1, !tbaa !19
  %481 = getelementptr inbounds i8, ptr %.8441620, i64 2
  %482 = getelementptr inbounds i8, ptr %470, i64 %455
  %niter721.next.1 = add i32 %niter721, 2
  %niter721.ncmp.1 = icmp eq i32 %niter721.next.1, %unroll_iter720
  br i1 %niter721.ncmp.1, label %.loopexit.loopexit712.unr-lcssa, label %458, !llvm.loop !31

483:                                              ; preds = %417
  %484 = icmp eq i32 %295, 3
  br i1 %484, label %.preheader596, label %489

.preheader596:                                    ; preds = %483
  %485 = icmp sgt i32 %293, 0
  br i1 %485, label %.lr.ph619, label %.loopexit

.lr.ph619:                                        ; preds = %.preheader596
  %486 = sext i32 %301 to i64
  %487 = add nsw i32 %293, -1
  %xtraiter = and i32 %293, 3
  %488 = icmp ult i32 %487, 3
  br i1 %488, label %.loopexit.loopexit713.unr-lcssa, label %.lr.ph619.new

.lr.ph619.new:                                    ; preds = %.lr.ph619
  %unroll_iter = and i32 %293, 2147483644
  br label %490

489:                                              ; preds = %483
  call void @__assert_fail(ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.4, i32 noundef 2052, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

490:                                              ; preds = %490, %.lr.ph619.new
  %.6388617 = phi ptr [ %299, %.lr.ph619.new ], [ %510, %490 ]
  %.9442616 = phi ptr [ %.2435, %.lr.ph619.new ], [ %509, %490 ]
  %niter = phi i32 [ 0, %.lr.ph619.new ], [ %niter.next.3, %490 ]
  %491 = load i8, ptr %.9442616, align 1, !tbaa !19
  store i8 %491, ptr %.6388617, align 1, !tbaa !19
  %492 = getelementptr inbounds i8, ptr %.6388617, i64 1
  store i8 %491, ptr %492, align 1, !tbaa !19
  %493 = getelementptr inbounds i8, ptr %.6388617, i64 2
  store i8 %491, ptr %493, align 1, !tbaa !19
  %494 = getelementptr inbounds i8, ptr %.9442616, i64 1
  %495 = getelementptr inbounds i8, ptr %.6388617, i64 %486
  %496 = load i8, ptr %494, align 1, !tbaa !19
  store i8 %496, ptr %495, align 1, !tbaa !19
  %497 = getelementptr inbounds i8, ptr %495, i64 1
  store i8 %496, ptr %497, align 1, !tbaa !19
  %498 = getelementptr inbounds i8, ptr %495, i64 2
  store i8 %496, ptr %498, align 1, !tbaa !19
  %499 = getelementptr inbounds i8, ptr %.9442616, i64 2
  %500 = getelementptr inbounds i8, ptr %495, i64 %486
  %501 = load i8, ptr %499, align 1, !tbaa !19
  store i8 %501, ptr %500, align 1, !tbaa !19
  %502 = getelementptr inbounds i8, ptr %500, i64 1
  store i8 %501, ptr %502, align 1, !tbaa !19
  %503 = getelementptr inbounds i8, ptr %500, i64 2
  store i8 %501, ptr %503, align 1, !tbaa !19
  %504 = getelementptr inbounds i8, ptr %.9442616, i64 3
  %505 = getelementptr inbounds i8, ptr %500, i64 %486
  %506 = load i8, ptr %504, align 1, !tbaa !19
  store i8 %506, ptr %505, align 1, !tbaa !19
  %507 = getelementptr inbounds i8, ptr %505, i64 1
  store i8 %506, ptr %507, align 1, !tbaa !19
  %508 = getelementptr inbounds i8, ptr %505, i64 2
  store i8 %506, ptr %508, align 1, !tbaa !19
  %509 = getelementptr inbounds i8, ptr %.9442616, i64 4
  %510 = getelementptr inbounds i8, ptr %505, i64 %486
  %niter.next.3 = add i32 %niter, 4
  %niter.ncmp.3 = icmp eq i32 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit.loopexit713.unr-lcssa, label %490, !llvm.loop !32

511:                                              ; preds = %285
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.4, i32 noundef 2063, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu8read_tgaEPKhjRiS2_S2_) #11
  unreachable

.loopexit.loopexit.unr-lcssa:                     ; preds = %308, %.lr.ph643
  %.0382641.unr = phi ptr [ %299, %.lr.ph643 ], [ %332, %308 ]
  %.3436640.unr = phi ptr [ %.2435, %.lr.ph643 ], [ %331, %308 ]
  %lcmp.mod743.not = icmp eq i32 %xtraiter741, 0
  br i1 %lcmp.mod743.not, label %.loopexit, label %.loopexit.loopexit.epilog-lcssa

.loopexit.loopexit.epilog-lcssa:                  ; preds = %.loopexit.loopexit.unr-lcssa
  %512 = getelementptr inbounds i8, ptr %.3436640.unr, i64 2
  %513 = load i8, ptr %512, align 1, !tbaa !19
  store i8 %513, ptr %.0382641.unr, align 1, !tbaa !19
  %514 = getelementptr inbounds i8, ptr %.3436640.unr, i64 1
  %515 = load i8, ptr %514, align 1, !tbaa !19
  %516 = getelementptr inbounds i8, ptr %.0382641.unr, i64 1
  store i8 %515, ptr %516, align 1, !tbaa !19
  %517 = load i8, ptr %.3436640.unr, align 1, !tbaa !19
  %518 = getelementptr inbounds i8, ptr %.0382641.unr, i64 2
  store i8 %517, ptr %518, align 1, !tbaa !19
  %519 = getelementptr inbounds i8, ptr %.3436640.unr, i64 3
  %520 = load i8, ptr %519, align 1, !tbaa !19
  %521 = getelementptr inbounds i8, ptr %.0382641.unr, i64 3
  store i8 %520, ptr %521, align 1, !tbaa !19
  br label %.loopexit

.loopexit.loopexit708.unr-lcssa:                  ; preds = %338, %.lr.ph639
  %.1383637.unr = phi ptr [ %299, %.lr.ph639 ], [ %356, %338 ]
  %.4437636.unr = phi ptr [ %.2435, %.lr.ph639 ], [ %355, %338 ]
  %lcmp.mod737.not = icmp eq i32 %xtraiter735, 0
  br i1 %lcmp.mod737.not, label %.loopexit, label %.loopexit.loopexit708.epilog-lcssa

.loopexit.loopexit708.epilog-lcssa:               ; preds = %.loopexit.loopexit708.unr-lcssa
  %522 = getelementptr inbounds i8, ptr %.4437636.unr, i64 2
  %523 = load i8, ptr %522, align 1, !tbaa !19
  store i8 %523, ptr %.1383637.unr, align 1, !tbaa !19
  %524 = getelementptr inbounds i8, ptr %.4437636.unr, i64 1
  %525 = load i8, ptr %524, align 1, !tbaa !19
  %526 = getelementptr inbounds i8, ptr %.1383637.unr, i64 1
  store i8 %525, ptr %526, align 1, !tbaa !19
  %527 = load i8, ptr %.4437636.unr, align 1, !tbaa !19
  %528 = getelementptr inbounds i8, ptr %.1383637.unr, i64 2
  store i8 %527, ptr %528, align 1, !tbaa !19
  br label %.loopexit

.loopexit.loopexit710.unr-lcssa:                  ; preds = %396, %.lr.ph631
  %.3385629.unr = phi ptr [ %299, %.lr.ph631 ], [ %414, %396 ]
  %.6439628.unr = phi ptr [ %.2435, %.lr.ph631 ], [ %413, %396 ]
  %lcmp.mod731.not = icmp eq i32 %xtraiter729, 0
  br i1 %lcmp.mod731.not, label %.loopexit, label %.loopexit.loopexit710.epilog-lcssa

.loopexit.loopexit710.epilog-lcssa:               ; preds = %.loopexit.loopexit710.unr-lcssa
  %529 = load i8, ptr %.6439628.unr, align 1, !tbaa !19
  store i8 %529, ptr %.3385629.unr, align 1, !tbaa !19
  %530 = getelementptr inbounds i8, ptr %.3385629.unr, i64 1
  store i8 %529, ptr %530, align 1, !tbaa !19
  %531 = load i8, ptr %.6439628.unr, align 1, !tbaa !19
  %532 = getelementptr inbounds i8, ptr %.3385629.unr, i64 2
  store i8 %531, ptr %532, align 1, !tbaa !19
  %533 = getelementptr inbounds i8, ptr %.6439628.unr, i64 1
  %534 = load i8, ptr %533, align 1, !tbaa !19
  %535 = getelementptr inbounds i8, ptr %.3385629.unr, i64 3
  store i8 %534, ptr %535, align 1, !tbaa !19
  br label %.loopexit

.loopexit.loopexit711.unr-lcssa:                  ; preds = %427, %.lr.ph627
  %.4386625.unr = phi ptr [ %299, %.lr.ph627 ], [ %451, %427 ]
  %.7440624.unr = phi ptr [ %.2435, %.lr.ph627 ], [ %450, %427 ]
  %lcmp.mod725.not = icmp eq i32 %xtraiter723, 0
  br i1 %lcmp.mod725.not, label %.loopexit, label %.epil.preheader722

.epil.preheader722:                               ; preds = %.loopexit.loopexit711.unr-lcssa, %.epil.preheader722
  %.4386625.epil = phi ptr [ %541, %.epil.preheader722 ], [ %.4386625.unr, %.loopexit.loopexit711.unr-lcssa ]
  %.7440624.epil = phi ptr [ %540, %.epil.preheader722 ], [ %.7440624.unr, %.loopexit.loopexit711.unr-lcssa ]
  %epil.iter724 = phi i32 [ %epil.iter724.next, %.epil.preheader722 ], [ 0, %.loopexit.loopexit711.unr-lcssa ]
  %536 = load i8, ptr %.7440624.epil, align 1, !tbaa !19
  %537 = zext i8 %536 to i64
  %538 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %537
  %539 = load <4 x i8>, ptr %538, align 4, !tbaa !19
  store <4 x i8> %539, ptr %.4386625.epil, align 1, !tbaa !19
  %540 = getelementptr inbounds i8, ptr %.7440624.epil, i64 1
  %541 = getelementptr inbounds i8, ptr %.4386625.epil, i64 %424
  %epil.iter724.next = add i32 %epil.iter724, 1
  %epil.iter724.cmp.not = icmp eq i32 %epil.iter724.next, %xtraiter723
  br i1 %epil.iter724.cmp.not, label %.loopexit, label %.epil.preheader722, !llvm.loop !33

.loopexit.loopexit712.unr-lcssa:                  ; preds = %458, %.lr.ph623
  %.5387621.unr = phi ptr [ %299, %.lr.ph623 ], [ %482, %458 ]
  %.8441620.unr = phi ptr [ %.2435, %.lr.ph623 ], [ %481, %458 ]
  %lcmp.mod719.not = icmp eq i32 %xtraiter717, 0
  br i1 %lcmp.mod719.not, label %.loopexit, label %.loopexit.loopexit712.epilog-lcssa

.loopexit.loopexit712.epilog-lcssa:               ; preds = %.loopexit.loopexit712.unr-lcssa
  %542 = load i8, ptr %.8441620.unr, align 1, !tbaa !19
  %543 = zext i8 %542 to i64
  %544 = getelementptr inbounds [256 x %"class.basisu::color_rgba"], ptr %6, i64 0, i64 %543
  %545 = load i8, ptr %544, align 4, !tbaa !19
  store i8 %545, ptr %.5387621.unr, align 1, !tbaa !19
  %546 = getelementptr inbounds i8, ptr %544, i64 1
  %547 = load i8, ptr %546, align 1, !tbaa !19
  %548 = getelementptr inbounds i8, ptr %.5387621.unr, i64 1
  store i8 %547, ptr %548, align 1, !tbaa !19
  %549 = getelementptr inbounds i8, ptr %544, i64 2
  %550 = load i8, ptr %549, align 2, !tbaa !19
  %551 = getelementptr inbounds i8, ptr %.5387621.unr, i64 2
  store i8 %550, ptr %551, align 1, !tbaa !19
  br label %.loopexit

.loopexit.loopexit713.unr-lcssa:                  ; preds = %490, %.lr.ph619
  %.6388617.unr = phi ptr [ %299, %.lr.ph619 ], [ %510, %490 ]
  %.9442616.unr = phi ptr [ %.2435, %.lr.ph619 ], [ %509, %490 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit.loopexit713.unr-lcssa, %.epil.preheader
  %.6388617.epil = phi ptr [ %556, %.epil.preheader ], [ %.6388617.unr, %.loopexit.loopexit713.unr-lcssa ]
  %.9442616.epil = phi ptr [ %555, %.epil.preheader ], [ %.9442616.unr, %.loopexit.loopexit713.unr-lcssa ]
  %epil.iter = phi i32 [ %epil.iter.next, %.epil.preheader ], [ 0, %.loopexit.loopexit713.unr-lcssa ]
  %552 = load i8, ptr %.9442616.epil, align 1, !tbaa !19
  store i8 %552, ptr %.6388617.epil, align 1, !tbaa !19
  %553 = getelementptr inbounds i8, ptr %.6388617.epil, i64 1
  store i8 %552, ptr %553, align 1, !tbaa !19
  %554 = getelementptr inbounds i8, ptr %.6388617.epil, i64 2
  store i8 %552, ptr %554, align 1, !tbaa !19
  %555 = getelementptr inbounds i8, ptr %.9442616.epil, i64 1
  %556 = getelementptr inbounds i8, ptr %.6388617.epil, i64 %486
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.epil.preheader, !llvm.loop !35

.loopexit:                                        ; preds = %.loopexit.loopexit713.unr-lcssa, %.epil.preheader, %.loopexit.loopexit712.epilog-lcssa, %.loopexit.loopexit712.unr-lcssa, %.loopexit.loopexit711.unr-lcssa, %.epil.preheader722, %.loopexit.loopexit710.epilog-lcssa, %.loopexit.loopexit710.unr-lcssa, %362, %.loopexit.loopexit708.epilog-lcssa, %.loopexit.loopexit708.unr-lcssa, %.loopexit.loopexit.epilog-lcssa, %.loopexit.loopexit.unr-lcssa, %.preheader596, %.preheader594, %.preheader592, %.preheader590, %.preheader588, %.preheader586, %.preheader585
  %557 = add nuw nsw i32 %.0445647, 1
  %.not511 = icmp slt i32 %557, %286
  br i1 %.not511, label %229, label %.thread552, !llvm.loop !36

.thread552.sink.split:                            ; preds = %280, %262, %245, %235
  call void @free(ptr noundef %215) #9
  br label %.thread552

.thread552:                                       ; preds = %.loopexit, %.thread552.sink.split, %221
  %spec.select521 = phi ptr [ %215, %221 ], [ null, %.thread552.sink.split ], [ %215, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %.sroa.0)
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %.thread525

.thread525:                                       ; preds = %156, %130, %115, %.thread552, %206, %109, %108, %198
  %.18 = phi ptr [ null, %198 ], [ null, %108 ], [ null, %109 ], [ %spec.select521, %.thread552 ], [ null, %206 ], [ null, %115 ], [ null, %130 ], [ null, %156 ]
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #9
  br label %558

558:                                              ; preds = %24, %18, %15, %12, %9, %21, %28, %32, %67, %87, %.thread525, %35, %64, %59, %61, %50, %53, %55, %46, %5
  %.23 = phi ptr [ null, %5 ], [ null, %18 ], [ null, %15 ], [ null, %12 ], [ null, %9 ], [ null, %21 ], [ null, %24 ], [ null, %28 ], [ null, %32 ], [ null, %46 ], [ null, %55 ], [ null, %53 ], [ null, %50 ], [ null, %61 ], [ null, %59 ], [ null, %64 ], [ null, %35 ], [ null, %67 ], [ %.18, %.thread525 ], [ null, %87 ]
  ret ptr %.23
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu11packed_uintILj2EEcvjEv(ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu10color_rgbaC2Ev(ptr noundef nonnull align 1 dereferenceable(4)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 1 dereferenceable(4) ptr @_ZN6basisu10color_rgba3setEiiii(ptr noundef nonnull align 1 dereferenceable(4), i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint 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 #6 = { 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 #7 = { inlinehint 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 #8 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #9 = { nounwind }
attributes #10 = { nounwind allocsize(0) }
attributes #11 = { noreturn 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !7, i64 17}
!10 = !{!"_ZTSN6basisu10tga_headerE", !7, i64 0, !7, i64 1, !7, i64 2, !11, i64 3, !11, i64 5, !7, i64 7, !11, i64 8, !11, i64 10, !11, i64 12, !11, i64 14, !7, i64 16, !7, i64 17}
!11 = !{!"_ZTSN6basisu11packed_uintILj2EEE", !7, i64 0}
!12 = !{!10, !7, i64 1}
!13 = !{!10, !7, i64 7}
!14 = !{!10, !7, i64 2}
!15 = !{!10, !7, i64 16}
!16 = !{!10, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.unroll.disable"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !18}


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