; LLVM IR from facebookresearch/habitat-sim :: src/deps/basis-universal/encoder (basisu_uastc_enc)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.basisu::uastc_encode_results" = type { i32, i32, %"struct.basist::astc_block_desc", %"class.basisu::color_rgba", i64 }
%"struct.basist::astc_block_desc" = type { i32, i32, i32, i32, i32, i8, [18 x i8], [64 x i8] }
%"class.basisu::color_rgba" = type { %union.anon }
%union.anon = type { [4 x i8] }
%struct.anon = type { i8, i8, i8, i8 }

@_ZN6basist22g_uastc_mode_has_alphaE = external constant [19 x i8], align 16
@.str = external hidden unnamed_addr constant [33 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [116 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb = external hidden unnamed_addr constant [140 x i8], align 1
@_ZN6basist23g_uastc_mode_huff_codesE = external constant [20 x [2 x i32]], align 16
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@_ZN6basist26g_uastc_mode_has_bc1_hint0E = external constant [19 x i8], align 16
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@_ZN6basist26g_uastc_mode_has_bc1_hint1E = external constant [19 x i8], align 16
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZN6basist26g_uastc_mode_has_etc1_biasE = external constant [19 x i8], align 16
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN6basist18g_uastc_mode_compsE = external constant [19 x i8], align 16
@_ZN6basist24g_uastc_mode_weight_bitsE = external constant [19 x i8], align 16
@_ZN6basist28g_uastc_mode_endpoint_rangesE = external constant [19 x i8], align 16
@_ZN6basist23g_astc_bise_range_tableE = external constant [21 x [3 x i32]], align 16
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(128) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %3, ptr noundef nonnull align 2 dereferenceable(8) %4, i1 noundef zeroext %5, i1 noundef zeroext %6) #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca [32 x i8], align 16
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca [32 x i8], align 16
  %25 = alloca [18 x i8], align 16
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca [18 x i32], align 16
  %41 = alloca [8 x i32], align 16
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %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 i32, align 4
  %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
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store i32 %3, ptr %11, align 4, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  %62 = zext i1 %5 to i8
  store i8 %62, ptr %13, align 1, !tbaa !11
  %63 = zext i1 %6 to i8
  store i8 %63, ptr %14, align 1, !tbaa !11
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %64, i32 0, i32 0
  %66 = load i32, ptr %65, align 8, !tbaa !13
  %67 = zext i32 %66 to i64
  %68 = getelementptr inbounds [19 x i8], ptr @_ZN6basist22g_uastc_mode_has_alphaE, i64 0, i64 %67
  %69 = load i8, ptr %68, align 1, !tbaa !18
  %70 = icmp ne i8 %69, 0
  br i1 %70, label %71, label %86

71:                                               ; preds = %7
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %72, i32 0, i32 0
  %74 = load i32, ptr %73, align 8, !tbaa !13
  %75 = icmp ne i32 %74, 8
  br i1 %75, label %76, label %86

76:                                               ; preds = %71
  %77 = load ptr, ptr %12, align 8, !tbaa !5
  %78 = load i16, ptr %77, align 2
  %79 = lshr i16 %78, 12
  %80 = zext i16 %79 to i32
  %81 = icmp sge i32 %80, 1
  br i1 %81, label %82, label %83

82:                                               ; preds = %76
  br label %85

83:                                               ; preds = %76
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.3, i32 noundef 115, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

84:                                               ; No predecessors!
  br label %85

85:                                               ; preds = %84, %82
  br label %86

86:                                               ; preds = %85, %71, %7
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #9
  %87 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %87, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !9
  %88 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 8, !tbaa !13
  %92 = zext i32 %91 to i64
  %93 = getelementptr inbounds [20 x [2 x i32]], ptr @_ZN6basist23g_uastc_mode_huff_codesE, i64 0, i64 %92
  %94 = getelementptr inbounds [2 x i32], ptr %93, i64 0, i64 0
  %95 = load i32, ptr %94, align 8, !tbaa !9
  %96 = zext i32 %95 to i64
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 8, !tbaa !13
  %100 = zext i32 %99 to i64
  %101 = getelementptr inbounds [20 x [2 x i32]], ptr @_ZN6basist23g_uastc_mode_huff_codesE, i64 0, i64 %100
  %102 = getelementptr inbounds [2 x i32], ptr %101, i64 0, i64 1
  %103 = load i32, ptr %102, align 4, !tbaa !9
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %88, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %96, i32 noundef %103, ptr noundef @.str.4)
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %104, i32 0, i32 0
  %106 = load i32, ptr %105, align 8, !tbaa !13
  %107 = icmp eq i32 %106, 8
  br i1 %107, label %108, label %169

108:                                              ; preds = %86
  %109 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %110 = load ptr, ptr %9, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %110, i32 0, i32 3
  %112 = getelementptr inbounds %"class.basisu::color_rgba", ptr %111, i32 0, i32 0
  %113 = getelementptr inbounds %struct.anon, ptr %112, i32 0, i32 0
  %114 = load i8, ptr %113, align 8, !tbaa !18
  %115 = zext i8 %114 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %109, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %115, i32 noundef 8, ptr noundef @.str.5)
  %116 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %117, i32 0, i32 3
  %119 = getelementptr inbounds %"class.basisu::color_rgba", ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds %struct.anon, ptr %119, i32 0, i32 1
  %121 = load i8, ptr %120, align 1, !tbaa !18
  %122 = zext i8 %121 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %116, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %122, i32 noundef 8, ptr noundef @.str.6)
  %123 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %124, i32 0, i32 3
  %126 = getelementptr inbounds %"class.basisu::color_rgba", ptr %125, i32 0, i32 0
  %127 = getelementptr inbounds %struct.anon, ptr %126, i32 0, i32 2
  %128 = load i8, ptr %127, align 2, !tbaa !18
  %129 = zext i8 %128 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %123, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %129, i32 noundef 8, ptr noundef @.str.7)
  %130 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %131, i32 0, i32 3
  %133 = getelementptr inbounds %"class.basisu::color_rgba", ptr %132, i32 0, i32 0
  %134 = getelementptr inbounds %struct.anon, ptr %133, i32 0, i32 3
  %135 = load i8, ptr %134, align 1, !tbaa !18
  %136 = zext i8 %135 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %130, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %136, i32 noundef 8, ptr noundef @.str.8)
  %137 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %138 = load ptr, ptr %10, align 8, !tbaa !5
  %139 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %138)
  %140 = zext i1 %139 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %137, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %140, i32 noundef 1, ptr noundef @.str.9)
  %141 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %142, i32 noundef 0)
  %144 = zext i32 %143 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %141, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %144, i32 noundef 3, ptr noundef @.str.10)
  %145 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %146 = load ptr, ptr %10, align 8, !tbaa !5
  %147 = call noundef i32 @_ZNK6basisu9etc_block12get_selectorEjj(ptr noundef nonnull align 8 dereferenceable(8) %146, i32 noundef 0, i32 noundef 0)
  %148 = zext i32 %147 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %145, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %148, i32 noundef 2, ptr noundef @.str.11)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %149)
  br i1 %150, label %151, label %154

151:                                              ; preds = %108
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = call noundef zeroext i16 @_ZNK6basisu9etc_block15get_base5_colorEv(ptr noundef nonnull align 8 dereferenceable(8) %152)
  call void @_ZN6basisu9etc_block13unpack_color5ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19, i16 noundef zeroext %153, i1 noundef zeroext false)
  br label %157

154:                                              ; preds = %108
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = call noundef zeroext i16 @_ZNK6basisu9etc_block15get_base4_colorEj(ptr noundef nonnull align 8 dereferenceable(8) %155, i32 noundef 0)
  call void @_ZN6basisu9etc_block13unpack_color4ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19, i16 noundef zeroext %156, i1 noundef zeroext false)
  br label %157

157:                                              ; preds = %154, %151
  %158 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %159 = load i32, ptr %17, align 4, !tbaa !9
  %160 = zext i32 %159 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %158, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %160, i32 noundef 5, ptr noundef @.str.12)
  %161 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %162 = load i32, ptr %18, align 4, !tbaa !9
  %163 = zext i32 %162 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %161, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %163, i32 noundef 5, ptr noundef @.str.13)
  %164 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %165 = load i32, ptr %19, align 4, !tbaa !9
  %166 = zext i32 %165 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %164, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %166, i32 noundef 5, ptr noundef @.str.14)
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %167, ptr align 16 %168, i64 16, i1 false)
  store i32 1, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %760

169:                                              ; preds = %86
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %170, i32 0, i32 0
  %172 = load i32, ptr %171, align 8, !tbaa !13
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_bc1_hint0E, i64 0, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !18
  %176 = icmp ne i8 %175, 0
  br i1 %176, label %177, label %182

177:                                              ; preds = %169
  %178 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %179 = load i8, ptr %13, align 1, !tbaa !11, !range !19, !noundef !20
  %180 = trunc i8 %179 to i1
  %181 = zext i1 %180 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %178, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %181, i32 noundef 1, ptr noundef @.str.15)
  br label %191

182:                                              ; preds = %169
  %183 = load i8, ptr %13, align 1, !tbaa !11, !range !19, !noundef !20
  %184 = trunc i8 %183 to i1
  %185 = zext i1 %184 to i32
  %186 = icmp eq i32 %185, 0
  br i1 %186, label %187, label %188

187:                                              ; preds = %182
  br label %190

188:                                              ; preds = %182
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.3, i32 noundef 158, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

189:                                              ; No predecessors!
  br label %190

190:                                              ; preds = %189, %187
  br label %191

191:                                              ; preds = %190, %177
  %192 = load ptr, ptr %9, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %192, i32 0, i32 0
  %194 = load i32, ptr %193, align 8, !tbaa !13
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_bc1_hint1E, i64 0, i64 %195
  %197 = load i8, ptr %196, align 1, !tbaa !18
  %198 = icmp ne i8 %197, 0
  br i1 %198, label %199, label %204

199:                                              ; preds = %191
  %200 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %201 = load i8, ptr %14, align 1, !tbaa !11, !range !19, !noundef !20
  %202 = trunc i8 %201 to i1
  %203 = zext i1 %202 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %200, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %203, i32 noundef 1, ptr noundef @.str.17)
  br label %213

204:                                              ; preds = %191
  %205 = load i8, ptr %14, align 1, !tbaa !11, !range !19, !noundef !20
  %206 = trunc i8 %205 to i1
  %207 = zext i1 %206 to i32
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %204
  br label %212

210:                                              ; preds = %204
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.3, i32 noundef 165, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

211:                                              ; No predecessors!
  br label %212

212:                                              ; preds = %211, %209
  br label %213

213:                                              ; preds = %212, %199
  %214 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_flip_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %215)
  %217 = zext i1 %216 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %214, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %217, i32 noundef 1, ptr noundef @.str.19)
  %218 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %219)
  %221 = zext i1 %220 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %218, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %221, i32 noundef 1, ptr noundef @.str.9)
  %222 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  %224 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %223, i32 noundef 0)
  %225 = zext i32 %224 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %222, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %225, i32 noundef 3, ptr noundef @.str.20)
  %226 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %227 = load ptr, ptr %10, align 8, !tbaa !5
  %228 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %227, i32 noundef 1)
  %229 = zext i32 %228 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %226, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %229, i32 noundef 3, ptr noundef @.str.21)
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %230, i32 0, i32 0
  %232 = load i32, ptr %231, align 8, !tbaa !13
  %233 = zext i32 %232 to i64
  %234 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_etc1_biasE, i64 0, i64 %233
  %235 = load i8, ptr %234, align 1, !tbaa !18
  %236 = icmp ne i8 %235, 0
  br i1 %236, label %237, label %241

237:                                              ; preds = %213
  %238 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %239 = load i32, ptr %11, align 4, !tbaa !9
  %240 = zext i32 %239 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %238, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %240, i32 noundef 5, ptr noundef @.str.22)
  br label %248

241:                                              ; preds = %213
  %242 = load i32, ptr %11, align 4, !tbaa !9
  %243 = icmp eq i32 %242, 0
  br i1 %243, label %244, label %245

244:                                              ; preds = %241
  br label %247

245:                                              ; preds = %241
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.3, i32 noundef 177, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

246:                                              ; No predecessors!
  br label %247

247:                                              ; preds = %246, %244
  br label %248

248:                                              ; preds = %247, %237
  %249 = load ptr, ptr %9, align 8, !tbaa !5
  %250 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %249, i32 0, i32 0
  %251 = load i32, ptr %250, align 8, !tbaa !13
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds [19 x i8], ptr @_ZN6basist22g_uastc_mode_has_alphaE, i64 0, i64 %252
  %254 = load i8, ptr %253, align 1, !tbaa !18
  %255 = icmp ne i8 %254, 0
  br i1 %255, label %256, label %282

256:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %257 = load ptr, ptr %12, align 8, !tbaa !5
  %258 = load i16, ptr %257, align 2
  %259 = lshr i16 %258, 8
  %260 = and i16 %259, 15
  %261 = zext i16 %260 to i32
  %262 = load ptr, ptr %12, align 8, !tbaa !5
  %263 = load i16, ptr %262, align 2
  %264 = lshr i16 %263, 12
  %265 = zext i16 %264 to i32
  %266 = shl i32 %265, 4
  %267 = or i32 %261, %266
  store i32 %267, ptr %21, align 4, !tbaa !9
  %268 = load i32, ptr %21, align 4, !tbaa !9
  %269 = icmp ugt i32 %268, 0
  br i1 %269, label %270, label %273

270:                                              ; preds = %256
  %271 = load i32, ptr %21, align 4, !tbaa !9
  %272 = icmp ule i32 %271, 255
  br label %273

273:                                              ; preds = %270, %256
  %274 = phi i1 [ false, %256 ], [ %272, %270 ]
  br i1 %274, label %275, label %276

275:                                              ; preds = %273
  br label %278

276:                                              ; preds = %273
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.3, i32 noundef 184, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

277:                                              ; No predecessors!
  br label %278

278:                                              ; preds = %277, %275
  %279 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %280 = load i32, ptr %21, align 4, !tbaa !9
  %281 = zext i32 %280 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %279, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %281, i32 noundef 8, ptr noundef @.str.25)
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %282

282:                                              ; preds = %278, %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 1, ptr %22, align 4, !tbaa !9
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %283, i32 0, i32 0
  %285 = load i32, ptr %284, align 8, !tbaa !13
  switch i32 %285, label %298 [
    i32 2, label %286
    i32 4, label %286
    i32 7, label %286
    i32 9, label %286
    i32 16, label %286
    i32 3, label %292
  ]

286:                                              ; preds = %282, %282, %282, %282, %282
  %287 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %288, i32 0, i32 1
  %290 = load i32, ptr %289, align 4, !tbaa !21
  %291 = zext i32 %290 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %287, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %291, i32 noundef 5, ptr noundef @.str.26)
  store i32 2, ptr %22, align 4, !tbaa !9
  br label %299

292:                                              ; preds = %282
  %293 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %294 = load ptr, ptr %9, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %294, i32 0, i32 1
  %296 = load i32, ptr %295, align 4, !tbaa !21
  %297 = zext i32 %296 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %293, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %297, i32 noundef 4, ptr noundef @.str.26)
  store i32 3, ptr %22, align 4, !tbaa !9
  br label %299

298:                                              ; preds = %282
  br label %299

299:                                              ; preds = %298, %292, %286
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 1, ptr %23, align 4, !tbaa !9
  %300 = load ptr, ptr %9, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %300, i32 0, i32 0
  %302 = load i32, ptr %301, align 8, !tbaa !13
  switch i32 %302, label %320 [
    i32 6, label %303
    i32 11, label %303
    i32 13, label %303
    i32 17, label %310
  ]

303:                                              ; preds = %299, %299, %299
  %304 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %305, i32 0, i32 2
  %307 = getelementptr inbounds %"struct.basist::astc_block_desc", ptr %306, i32 0, i32 4
  %308 = load i32, ptr %307, align 8, !tbaa !22
  %309 = sext i32 %308 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %304, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %309, i32 noundef 2, ptr noundef @.str.27)
  store i32 2, ptr %23, align 4, !tbaa !9
  br label %321

310:                                              ; preds = %299
  %311 = load ptr, ptr %9, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %311, i32 0, i32 2
  %313 = getelementptr inbounds %"struct.basist::astc_block_desc", ptr %312, i32 0, i32 4
  %314 = load i32, ptr %313, align 8, !tbaa !22
  %315 = icmp eq i32 %314, 3
  br i1 %315, label %316, label %317

316:                                              ; preds = %310
  br label %319

317:                                              ; preds = %310
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.3, i32 noundef 239, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

318:                                              ; No predecessors!
  br label %319

319:                                              ; preds = %318, %316
  store i32 2, ptr %23, align 4, !tbaa !9
  br label %321

320:                                              ; preds = %299
  br label %321

321:                                              ; preds = %320, %319, %303
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #9
  %322 = getelementptr inbounds [32 x i8], ptr %24, i64 0, i64 0
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %323, i32 0, i32 2
  %325 = getelementptr inbounds %"struct.basist::astc_block_desc", ptr %324, i32 0, i32 7
  %326 = getelementptr inbounds [64 x i8], ptr %325, i64 0, i64 0
  %327 = load i32, ptr %23, align 4, !tbaa !9
  %328 = mul i32 16, %327
  %329 = zext i32 %328 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %322, ptr align 1 %326, i64 %329, i1 false)
  call void @llvm.lifetime.start.p0(i64 18, ptr %25) #9
  %330 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 0
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %331, i32 0, i32 2
  %333 = getelementptr inbounds %"struct.basist::astc_block_desc", ptr %332, i32 0, i32 6
  %334 = getelementptr inbounds [18 x i8], ptr %333, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %330, ptr align 1 %334, i64 18, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %335, i32 0, i32 0
  %337 = load i32, ptr %336, align 8, !tbaa !13
  %338 = zext i32 %337 to i64
  %339 = getelementptr inbounds [19 x i8], ptr @_ZN6basist18g_uastc_mode_compsE, i64 0, i64 %338
  %340 = load i8, ptr %339, align 1, !tbaa !18
  %341 = zext i8 %340 to i32
  store i32 %341, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %342 = load ptr, ptr %9, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %342, i32 0, i32 0
  %344 = load i32, ptr %343, align 8, !tbaa !13
  %345 = zext i32 %344 to i64
  %346 = getelementptr inbounds [19 x i8], ptr @_ZN6basist24g_uastc_mode_weight_bitsE, i64 0, i64 %345
  %347 = load i8, ptr %346, align 1, !tbaa !18
  %348 = zext i8 %347 to i32
  store i32 %348, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %349 = load i32, ptr %22, align 4, !tbaa !9
  %350 = load ptr, ptr %9, align 8, !tbaa !5
  %351 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %350, i32 0, i32 0
  %352 = load i32, ptr %351, align 8, !tbaa !13
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %353, i32 0, i32 1
  %355 = load i32, ptr %354, align 4, !tbaa !21
  %356 = call noundef ptr @_ZN6basist18get_anchor_indicesEjjjRPKh(i32 noundef %349, i32 noundef %352, i32 noundef %355, ptr noundef nonnull align 8 dereferenceable(8) %28)
  store ptr %356, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %357

357:                                              ; preds = %511, %321
  %358 = load i32, ptr %30, align 4, !tbaa !9
  %359 = load i32, ptr %23, align 4, !tbaa !9
  %360 = icmp ult i32 %358, %359
  br i1 %360, label %362, label %361

361:                                              ; preds = %357
  store i32 4, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %514

362:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %363

363:                                              ; preds = %507, %362
  %364 = load i32, ptr %31, align 4, !tbaa !9
  %365 = load i32, ptr %22, align 4, !tbaa !9
  %366 = icmp ult i32 %364, %365
  br i1 %366, label %368, label %367

367:                                              ; preds = %363
  store i32 7, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %510

368:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %369 = load ptr, ptr %29, align 8, !tbaa !5
  %370 = load i32, ptr %31, align 4, !tbaa !9
  %371 = zext i32 %370 to i64
  %372 = getelementptr inbounds i8, ptr %369, i64 %371
  %373 = load i8, ptr %372, align 1, !tbaa !18
  %374 = zext i8 %373 to i32
  store i32 %374, ptr %32, align 4, !tbaa !9
  %375 = load i32, ptr %32, align 4, !tbaa !9
  %376 = load i32, ptr %23, align 4, !tbaa !9
  %377 = mul i32 %375, %376
  %378 = load i32, ptr %30, align 4, !tbaa !9
  %379 = add i32 %377, %378
  %380 = zext i32 %379 to i64
  %381 = getelementptr inbounds [32 x i8], ptr %24, i64 0, i64 %380
  %382 = load i8, ptr %381, align 1, !tbaa !18
  %383 = zext i8 %382 to i32
  %384 = load i32, ptr %27, align 4, !tbaa !9
  %385 = sub i32 %384, 1
  %386 = shl i32 1, %385
  %387 = and i32 %383, %386
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %506

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

390:                                              ; preds = %427, %389
  %391 = load i32, ptr %33, align 4, !tbaa !9
  %392 = icmp ult i32 %391, 16
  br i1 %392, label %394, label %393

393:                                              ; preds = %390
  store i32 10, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %430

394:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %395 = load ptr, ptr %28, align 8, !tbaa !5
  %396 = load i32, ptr %33, align 4, !tbaa !9
  %397 = zext i32 %396 to i64
  %398 = getelementptr inbounds i8, ptr %395, i64 %397
  %399 = load i8, ptr %398, align 1, !tbaa !18
  %400 = zext i8 %399 to i32
  store i32 %400, ptr %34, align 4, !tbaa !9
  %401 = load i32, ptr %34, align 4, !tbaa !9
  %402 = load i32, ptr %31, align 4, !tbaa !9
  %403 = icmp eq i32 %401, %402
  br i1 %403, label %404, label %426

404:                                              ; preds = %394
  %405 = load i32, ptr %27, align 4, !tbaa !9
  %406 = shl i32 1, %405
  %407 = sub nsw i32 %406, 1
  %408 = load i32, ptr %33, align 4, !tbaa !9
  %409 = load i32, ptr %23, align 4, !tbaa !9
  %410 = mul i32 %408, %409
  %411 = load i32, ptr %30, align 4, !tbaa !9
  %412 = add i32 %410, %411
  %413 = zext i32 %412 to i64
  %414 = getelementptr inbounds [32 x i8], ptr %24, i64 0, i64 %413
  %415 = load i8, ptr %414, align 1, !tbaa !18
  %416 = zext i8 %415 to i32
  %417 = sub nsw i32 %407, %416
  %418 = trunc i32 %417 to i8
  %419 = load i32, ptr %33, align 4, !tbaa !9
  %420 = load i32, ptr %23, align 4, !tbaa !9
  %421 = mul i32 %419, %420
  %422 = load i32, ptr %30, align 4, !tbaa !9
  %423 = add i32 %421, %422
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds [32 x i8], ptr %24, i64 0, i64 %424
  store i8 %418, ptr %425, align 1, !tbaa !18
  br label %426

426:                                              ; preds = %404, %394
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %427

427:                                              ; preds = %426
  %428 = load i32, ptr %33, align 4, !tbaa !9
  %429 = add i32 %428, 1
  store i32 %429, ptr %33, align 4, !tbaa !9
  br label %390, !llvm.loop !23

430:                                              ; preds = %393
  %431 = load i32, ptr %23, align 4, !tbaa !9
  %432 = icmp eq i32 %431, 2
  br i1 %432, label %433, label %474

433:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %434

434:                                              ; preds = %470, %433
  %435 = load i32, ptr %35, align 4, !tbaa !9
  %436 = load i32, ptr %26, align 4, !tbaa !9
  %437 = icmp slt i32 %435, %436
  br i1 %437, label %439, label %438

438:                                              ; preds = %434
  store i32 13, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %473

439:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %440 = load i32, ptr %26, align 4, !tbaa !9
  %441 = icmp eq i32 %440, 2
  br i1 %441, label %442, label %444

442:                                              ; preds = %439
  %443 = load i32, ptr %35, align 4, !tbaa !9
  br label %453

444:                                              ; preds = %439
  %445 = load i32, ptr %35, align 4, !tbaa !9
  %446 = load ptr, ptr %9, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %446, i32 0, i32 2
  %448 = getelementptr inbounds %"struct.basist::astc_block_desc", ptr %447, i32 0, i32 4
  %449 = load i32, ptr %448, align 8, !tbaa !22
  %450 = icmp eq i32 %445, %449
  %451 = zext i1 %450 to i64
  %452 = select i1 %450, i32 1, i32 0
  br label %453

453:                                              ; preds = %444, %442
  %454 = phi i32 [ %443, %442 ], [ %452, %444 ]
  store i32 %454, ptr %36, align 4, !tbaa !9
  %455 = load i32, ptr %36, align 4, !tbaa !9
  %456 = load i32, ptr %30, align 4, !tbaa !9
  %457 = icmp eq i32 %455, %456
  br i1 %457, label %458, label %469

458:                                              ; preds = %453
  %459 = load i32, ptr %35, align 4, !tbaa !9
  %460 = mul nsw i32 %459, 2
  %461 = add nsw i32 %460, 0
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 %462
  %464 = load i32, ptr %35, align 4, !tbaa !9
  %465 = mul nsw i32 %464, 2
  %466 = add nsw i32 %465, 1
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 %467
  call void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %463, ptr noundef nonnull align 1 dereferenceable(1) %468) #9
  br label %469

469:                                              ; preds = %458, %453
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %470

470:                                              ; preds = %469
  %471 = load i32, ptr %35, align 4, !tbaa !9
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %35, align 4, !tbaa !9
  br label %434, !llvm.loop !25

473:                                              ; preds = %438
  br label %505

474:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %475

475:                                              ; preds = %501, %474
  %476 = load i32, ptr %37, align 4, !tbaa !9
  %477 = load i32, ptr %26, align 4, !tbaa !9
  %478 = icmp ult i32 %476, %477
  br i1 %478, label %480, label %479

479:                                              ; preds = %475
  store i32 16, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %504

480:                                              ; preds = %475
  %481 = load i32, ptr %31, align 4, !tbaa !9
  %482 = load i32, ptr %26, align 4, !tbaa !9
  %483 = mul i32 %481, %482
  %484 = mul i32 %483, 2
  %485 = load i32, ptr %37, align 4, !tbaa !9
  %486 = mul i32 %485, 2
  %487 = add i32 %484, %486
  %488 = add i32 %487, 0
  %489 = zext i32 %488 to i64
  %490 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 %489
  %491 = load i32, ptr %31, align 4, !tbaa !9
  %492 = load i32, ptr %26, align 4, !tbaa !9
  %493 = mul i32 %491, %492
  %494 = mul i32 %493, 2
  %495 = load i32, ptr %37, align 4, !tbaa !9
  %496 = mul i32 %495, 2
  %497 = add i32 %494, %496
  %498 = add i32 %497, 1
  %499 = zext i32 %498 to i64
  %500 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 %499
  call void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %490, ptr noundef nonnull align 1 dereferenceable(1) %500) #9
  br label %501

501:                                              ; preds = %480
  %502 = load i32, ptr %37, align 4, !tbaa !9
  %503 = add i32 %502, 1
  store i32 %503, ptr %37, align 4, !tbaa !9
  br label %475, !llvm.loop !26

504:                                              ; preds = %479
  br label %505

505:                                              ; preds = %504, %473
  br label %506

506:                                              ; preds = %505, %368
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %507

507:                                              ; preds = %506
  %508 = load i32, ptr %31, align 4, !tbaa !9
  %509 = add i32 %508, 1
  store i32 %509, ptr %31, align 4, !tbaa !9
  br label %363, !llvm.loop !27

510:                                              ; preds = %367
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %30, align 4, !tbaa !9
  %513 = add i32 %512, 1
  store i32 %513, ptr %30, align 4, !tbaa !9
  br label %357, !llvm.loop !28

514:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %515 = load i32, ptr %26, align 4, !tbaa !9
  %516 = mul i32 %515, 2
  %517 = load i32, ptr %22, align 4, !tbaa !9
  %518 = mul i32 %516, %517
  store i32 %518, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  %519 = load ptr, ptr %9, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.basisu::uastc_encode_results", ptr %519, i32 0, i32 0
  %521 = load i32, ptr %520, align 8, !tbaa !13
  %522 = zext i32 %521 to i64
  %523 = getelementptr inbounds [19 x i8], ptr @_ZN6basist28g_uastc_mode_endpoint_rangesE, i64 0, i64 %522
  %524 = load i8, ptr %523, align 1, !tbaa !18
  %525 = zext i8 %524 to i32
  store i32 %525, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 72, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 0, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  store i32 0, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store i32 1, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %526 = load i32, ptr %39, align 4, !tbaa !9
  %527 = zext i32 %526 to i64
  %528 = getelementptr inbounds [21 x [3 x i32]], ptr @_ZN6basist23g_astc_bise_range_tableE, i64 0, i64 %527
  %529 = getelementptr inbounds [3 x i32], ptr %528, i64 0, i64 0
  %530 = load i32, ptr %529, align 4, !tbaa !9
  store i32 %530, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %531 = load i32, ptr %39, align 4, !tbaa !9
  %532 = zext i32 %531 to i64
  %533 = getelementptr inbounds [21 x [3 x i32]], ptr @_ZN6basist23g_astc_bise_range_tableE, i64 0, i64 %532
  %534 = getelementptr inbounds [3 x i32], ptr %533, i64 0, i64 1
  %535 = load i32, ptr %534, align 4, !tbaa !9
  store i32 %535, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %536 = load i32, ptr %39, align 4, !tbaa !9
  %537 = zext i32 %536 to i64
  %538 = getelementptr inbounds [21 x [3 x i32]], ptr @_ZN6basist23g_astc_bise_range_tableE, i64 0, i64 %537
  %539 = getelementptr inbounds [3 x i32], ptr %538, i64 0, i64 2
  %540 = load i32, ptr %539, align 4, !tbaa !9
  store i32 %540, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %541

541:                                              ; preds = %617, %514
  %542 = load i32, ptr %48, align 4, !tbaa !9
  %543 = load i32, ptr %38, align 4, !tbaa !9
  %544 = icmp ult i32 %542, %543
  br i1 %544, label %546, label %545

545:                                              ; preds = %541
  store i32 19, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %620

546:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %547 = load i32, ptr %48, align 4, !tbaa !9
  %548 = zext i32 %547 to i64
  %549 = getelementptr inbounds [18 x i8], ptr %25, i64 0, i64 %548
  %550 = load i8, ptr %549, align 1, !tbaa !18
  %551 = zext i8 %550 to i32
  store i32 %551, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %552 = load i32, ptr %49, align 4, !tbaa !9
  %553 = load i32, ptr %45, align 4, !tbaa !9
  %554 = shl i32 1, %553
  %555 = sub nsw i32 %554, 1
  %556 = and i32 %552, %555
  store i32 %556, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %557 = load i32, ptr %49, align 4, !tbaa !9
  %558 = load i32, ptr %45, align 4, !tbaa !9
  %559 = lshr i32 %557, %558
  store i32 %559, ptr %51, align 4, !tbaa !9
  %560 = load i32, ptr %50, align 4, !tbaa !9
  %561 = load i32, ptr %48, align 4, !tbaa !9
  %562 = zext i32 %561 to i64
  %563 = getelementptr inbounds [18 x i32], ptr %40, i64 0, i64 %562
  store i32 %560, ptr %563, align 4, !tbaa !9
  %564 = load i32, ptr %46, align 4, !tbaa !9
  %565 = icmp ne i32 %564, 0
  br i1 %565, label %566, label %589

566:                                              ; preds = %546
  %567 = load i32, ptr %51, align 4, !tbaa !9
  %568 = icmp ult i32 %567, 3
  br i1 %568, label %569, label %570

569:                                              ; preds = %566
  br label %572

570:                                              ; preds = %566
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.3, i32 noundef 358, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

571:                                              ; No predecessors!
  br label %572

572:                                              ; preds = %571, %569
  %573 = load i32, ptr %51, align 4, !tbaa !9
  %574 = load i32, ptr %44, align 4, !tbaa !9
  %575 = mul i32 %573, %574
  %576 = load i32, ptr %43, align 4, !tbaa !9
  %577 = add i32 %576, %575
  store i32 %577, ptr %43, align 4, !tbaa !9
  %578 = load i32, ptr %44, align 4, !tbaa !9
  %579 = mul i32 %578, 3
  store i32 %579, ptr %44, align 4, !tbaa !9
  %580 = load i32, ptr %44, align 4, !tbaa !9
  %581 = icmp eq i32 %580, 243
  br i1 %581, label %582, label %588

582:                                              ; preds = %572
  %583 = load i32, ptr %43, align 4, !tbaa !9
  %584 = load i32, ptr %42, align 4, !tbaa !9
  %585 = add i32 %584, 1
  store i32 %585, ptr %42, align 4, !tbaa !9
  %586 = zext i32 %584 to i64
  %587 = getelementptr inbounds [8 x i32], ptr %41, i64 0, i64 %586
  store i32 %583, ptr %587, align 4, !tbaa !9
  store i32 0, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %588

588:                                              ; preds = %582, %572
  br label %616

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

592:                                              ; preds = %589
  %593 = load i32, ptr %51, align 4, !tbaa !9
  %594 = icmp ult i32 %593, 5
  br i1 %594, label %595, label %596

595:                                              ; preds = %592
  br label %598

596:                                              ; preds = %592
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.3, i32 noundef 370, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

597:                                              ; No predecessors!
  br label %598

598:                                              ; preds = %597, %595
  %599 = load i32, ptr %51, align 4, !tbaa !9
  %600 = load i32, ptr %44, align 4, !tbaa !9
  %601 = mul i32 %599, %600
  %602 = load i32, ptr %43, align 4, !tbaa !9
  %603 = add i32 %602, %601
  store i32 %603, ptr %43, align 4, !tbaa !9
  %604 = load i32, ptr %44, align 4, !tbaa !9
  %605 = mul i32 %604, 5
  store i32 %605, ptr %44, align 4, !tbaa !9
  %606 = load i32, ptr %44, align 4, !tbaa !9
  %607 = icmp eq i32 %606, 125
  br i1 %607, label %608, label %614

608:                                              ; preds = %598
  %609 = load i32, ptr %43, align 4, !tbaa !9
  %610 = load i32, ptr %42, align 4, !tbaa !9
  %611 = add i32 %610, 1
  store i32 %611, ptr %42, align 4, !tbaa !9
  %612 = zext i32 %610 to i64
  %613 = getelementptr inbounds [8 x i32], ptr %41, i64 0, i64 %612
  store i32 %609, ptr %613, align 4, !tbaa !9
  store i32 0, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %614

614:                                              ; preds = %608, %598
  br label %615

615:                                              ; preds = %614, %589
  br label %616

616:                                              ; preds = %615, %588
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %617

617:                                              ; preds = %616
  %618 = load i32, ptr %48, align 4, !tbaa !9
  %619 = add i32 %618, 1
  store i32 %619, ptr %48, align 4, !tbaa !9
  br label %541, !llvm.loop !29

620:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  store i32 0, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %621

621:                                              ; preds = %641, %620
  %622 = load i32, ptr %53, align 4, !tbaa !9
  %623 = load i32, ptr %42, align 4, !tbaa !9
  %624 = icmp ult i32 %622, %623
  br i1 %624, label %626, label %625

625:                                              ; preds = %621
  store i32 22, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %644

626:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %627 = load i32, ptr %46, align 4, !tbaa !9
  %628 = icmp ne i32 %627, 0
  %629 = zext i1 %628 to i64
  %630 = select i1 %628, i32 8, i32 7
  store i32 %630, ptr %54, align 4, !tbaa !9
  %631 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %632 = load i32, ptr %53, align 4, !tbaa !9
  %633 = zext i32 %632 to i64
  %634 = getelementptr inbounds [8 x i32], ptr %41, i64 0, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !9
  %636 = zext i32 %635 to i64
  %637 = load i32, ptr %54, align 4, !tbaa !9
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %631, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %636, i32 noundef %637, ptr noundef @.str.31)
  %638 = load i32, ptr %54, align 4, !tbaa !9
  %639 = load i32, ptr %52, align 4, !tbaa !9
  %640 = add i32 %639, %638
  store i32 %640, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %641

641:                                              ; preds = %626
  %642 = load i32, ptr %53, align 4, !tbaa !9
  %643 = add i32 %642, 1
  store i32 %643, ptr %53, align 4, !tbaa !9
  br label %621, !llvm.loop !30

644:                                              ; preds = %625
  %645 = load i32, ptr %44, align 4, !tbaa !9
  %646 = icmp ugt i32 %645, 1
  br i1 %646, label %647, label %680

647:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %648 = load i32, ptr %46, align 4, !tbaa !9
  %649 = icmp ne i32 %648, 0
  br i1 %649, label %650, label %666

650:                                              ; preds = %647
  %651 = load i32, ptr %44, align 4, !tbaa !9
  %652 = icmp eq i32 %651, 3
  br i1 %652, label %653, label %654

653:                                              ; preds = %650
  store i32 2, ptr %55, align 4, !tbaa !9
  br label %665

654:                                              ; preds = %650
  %655 = load i32, ptr %44, align 4, !tbaa !9
  %656 = icmp eq i32 %655, 9
  br i1 %656, label %657, label %658

657:                                              ; preds = %654
  store i32 4, ptr %55, align 4, !tbaa !9
  br label %664

658:                                              ; preds = %654
  %659 = load i32, ptr %44, align 4, !tbaa !9
  %660 = icmp eq i32 %659, 27
  br i1 %660, label %661, label %662

661:                                              ; preds = %658
  store i32 5, ptr %55, align 4, !tbaa !9
  br label %663

662:                                              ; preds = %658
  store i32 7, ptr %55, align 4, !tbaa !9
  br label %663

663:                                              ; preds = %662, %661
  br label %664

664:                                              ; preds = %663, %657
  br label %665

665:                                              ; preds = %664, %653
  br label %672

666:                                              ; preds = %647
  %667 = load i32, ptr %44, align 4, !tbaa !9
  %668 = icmp eq i32 %667, 5
  br i1 %668, label %669, label %670

669:                                              ; preds = %666
  store i32 3, ptr %55, align 4, !tbaa !9
  br label %671

670:                                              ; preds = %666
  store i32 5, ptr %55, align 4, !tbaa !9
  br label %671

671:                                              ; preds = %670, %669
  br label %672

672:                                              ; preds = %671, %665
  %673 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %674 = load i32, ptr %43, align 4, !tbaa !9
  %675 = zext i32 %674 to i64
  %676 = load i32, ptr %55, align 4, !tbaa !9
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %673, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %675, i32 noundef %676, ptr noundef @.str.31)
  %677 = load i32, ptr %55, align 4, !tbaa !9
  %678 = load i32, ptr %52, align 4, !tbaa !9
  %679 = add i32 %678, %677
  store i32 %679, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %680

680:                                              ; preds = %672, %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %681

681:                                              ; preds = %697, %680
  %682 = load i32, ptr %56, align 4, !tbaa !9
  %683 = load i32, ptr %38, align 4, !tbaa !9
  %684 = icmp ult i32 %682, %683
  br i1 %684, label %686, label %685

685:                                              ; preds = %681
  store i32 25, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %700

686:                                              ; preds = %681
  %687 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %688 = load i32, ptr %56, align 4, !tbaa !9
  %689 = zext i32 %688 to i64
  %690 = getelementptr inbounds [18 x i32], ptr %40, i64 0, i64 %689
  %691 = load i32, ptr %690, align 4, !tbaa !9
  %692 = zext i32 %691 to i64
  %693 = load i32, ptr %45, align 4, !tbaa !9
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %687, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %692, i32 noundef %693, ptr noundef @.str.32)
  %694 = load i32, ptr %45, align 4, !tbaa !9
  %695 = load i32, ptr %52, align 4, !tbaa !9
  %696 = add i32 %695, %694
  store i32 %696, ptr %52, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %686
  %698 = load i32, ptr %56, align 4, !tbaa !9
  %699 = add i32 %698, 1
  store i32 %699, ptr %56, align 4, !tbaa !9
  br label %681, !llvm.loop !31

700:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  store i32 0, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #9
  %701 = load i32, ptr %23, align 4, !tbaa !9
  %702 = icmp eq i32 %701, 2
  %703 = zext i1 %702 to i64
  %704 = select i1 %702, i32 1, i32 0
  store i32 %704, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %705

705:                                              ; preds = %748, %700
  %706 = load i32, ptr %59, align 4, !tbaa !9
  %707 = load i32, ptr %23, align 4, !tbaa !9
  %708 = mul i32 16, %707
  %709 = icmp ult i32 %706, %708
  br i1 %709, label %711, label %710

710:                                              ; preds = %705
  store i32 28, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  br label %751

711:                                              ; preds = %705
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  %712 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %712, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %713

713:                                              ; preds = %733, %711
  %714 = load i32, ptr %61, align 4, !tbaa !9
  %715 = load i32, ptr %22, align 4, !tbaa !9
  %716 = icmp ult i32 %714, %715
  br i1 %716, label %718, label %717

717:                                              ; preds = %713
  store i32 31, ptr %20, align 4
  br label %736

718:                                              ; preds = %713
  %719 = load ptr, ptr %29, align 8, !tbaa !5
  %720 = load i32, ptr %61, align 4, !tbaa !9
  %721 = zext i32 %720 to i64
  %722 = getelementptr inbounds i8, ptr %719, i64 %721
  %723 = load i8, ptr %722, align 1, !tbaa !18
  %724 = zext i8 %723 to i32
  %725 = load i32, ptr %59, align 4, !tbaa !9
  %726 = load i32, ptr %58, align 4, !tbaa !9
  %727 = lshr i32 %725, %726
  %728 = icmp eq i32 %724, %727
  br i1 %728, label %729, label %732

729:                                              ; preds = %718
  %730 = load i32, ptr %60, align 4, !tbaa !9
  %731 = add i32 %730, -1
  store i32 %731, ptr %60, align 4, !tbaa !9
  store i32 31, ptr %20, align 4
  br label %736

732:                                              ; preds = %718
  br label %733

733:                                              ; preds = %732
  %734 = load i32, ptr %61, align 4, !tbaa !9
  %735 = add i32 %734, 1
  store i32 %735, ptr %61, align 4, !tbaa !9
  br label %713, !llvm.loop !32

736:                                              ; preds = %729, %717
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %737

737:                                              ; preds = %736
  %738 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  %739 = load i32, ptr %59, align 4, !tbaa !9
  %740 = zext i32 %739 to i64
  %741 = getelementptr inbounds [32 x i8], ptr %24, i64 0, i64 %740
  %742 = load i8, ptr %741, align 1, !tbaa !18
  %743 = zext i8 %742 to i64
  %744 = load i32, ptr %60, align 4, !tbaa !9
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef %738, ptr noundef nonnull align 4 dereferenceable(4) %16, i64 noundef %743, i32 noundef %744, ptr noundef null)
  %745 = load i32, ptr %60, align 4, !tbaa !9
  %746 = load i32, ptr %57, align 4, !tbaa !9
  %747 = add i32 %746, %745
  store i32 %747, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  br label %748

748:                                              ; preds = %737
  %749 = load i32, ptr %59, align 4, !tbaa !9
  %750 = add i32 %749, 1
  store i32 %750, ptr %59, align 4, !tbaa !9
  br label %705, !llvm.loop !33

751:                                              ; preds = %710
  %752 = load i32, ptr %16, align 4, !tbaa !9
  %753 = icmp ule i32 %752, 128
  br i1 %753, label %754, label %755

754:                                              ; preds = %751
  br label %757

755:                                              ; preds = %751
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.3, i32 noundef 449, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

756:                                              ; No predecessors!
  br label %757

757:                                              ; preds = %756, %754
  %758 = load ptr, ptr %8, align 8, !tbaa !5
  %759 = getelementptr inbounds [32 x i8], ptr %15, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %758, ptr align 16 %759, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 18, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  store i32 0, ptr %20, align 4
  br label %760

760:                                              ; preds = %757, %157
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  %761 = load i32, ptr %20, align 4
  switch i32 %761, label %763 [
    i32 0, label %762
    i32 1, label %762
  ]

762:                                              ; preds = %760, %760
  ret void

763:                                              ; preds = %760
  unreachable
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), i64 noundef, i32 noundef, ptr noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

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

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

declare void @_ZN6basisu9etc_block13unpack_color5ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i16 noundef zeroext, i1 noundef zeroext) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i16 @_ZNK6basisu9etc_block15get_base5_colorEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

declare void @_ZN6basisu9etc_block13unpack_color4ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i16 noundef zeroext, i1 noundef zeroext) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_ZNK6basisu9etc_block15get_base4_colorEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #5 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) #7

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6basisu9etc_block12get_flip_bitEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

declare noundef ptr @_ZN6basist18get_anchor_indicesEjjjRPKh(i32 noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(8)) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #5

attributes #0 = { 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 #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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 #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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind }
attributes #9 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSN6basisu20uastc_encode_resultsE", !10, i64 0, !10, i64 4, !15, i64 8, !16, i64 112, !17, i64 120}
!15 = !{!"_ZTSN6basist15astc_block_descE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !12, i64 20, !7, i64 21, !7, i64 39}
!16 = !{!"_ZTSN6basisu10color_rgbaE", !7, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!14, !10, i64 4}
!22 = !{!14, !10, i64 24}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !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"

@_ZN6basist22g_uastc_mode_has_alphaE = external local_unnamed_addr constant [19 x i8], align 16
@.str = external hidden unnamed_addr constant [33 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [116 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb = external hidden unnamed_addr constant [140 x i8], align 1
@_ZN6basist23g_uastc_mode_huff_codesE = external local_unnamed_addr constant [20 x [2 x i32]], align 16
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@_ZN6basist26g_uastc_mode_has_bc1_hint0E = external local_unnamed_addr constant [19 x i8], align 16
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@_ZN6basist26g_uastc_mode_has_bc1_hint1E = external local_unnamed_addr constant [19 x i8], align 16
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZN6basist26g_uastc_mode_has_etc1_biasE = external local_unnamed_addr constant [19 x i8], align 16
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN6basist18g_uastc_mode_compsE = external local_unnamed_addr constant [19 x i8], align 16
@_ZN6basist24g_uastc_mode_weight_bitsE = external local_unnamed_addr constant [19 x i8], align 16
@_ZN6basist28g_uastc_mode_endpoint_rangesE = external local_unnamed_addr constant [19 x i8], align 16
@_ZN6basist23g_astc_bise_range_tableE = external local_unnamed_addr constant [21 x [3 x i32]], align 16
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [24 x i8], align 1
@switch.table._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb = private unnamed_addr constant [15 x i32] [i32 5, i32 4, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5], align 4
@switch.table._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb.1 = private unnamed_addr constant [15 x i32] [i32 2, i32 3, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2], align 4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb(ptr nocapture noundef nonnull writeonly align 8 dereferenceable(16) %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(128) %1, ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef %3, ptr nocapture noundef nonnull readonly align 2 dereferenceable(8) %4, i1 noundef zeroext %5, i1 noundef zeroext %6) local_unnamed_addr #0 {
  %8 = alloca [32 x i8], align 16
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca [32 x i8], align 16
  %14 = alloca [18 x i8], align 16
  %15 = alloca ptr, align 8
  %16 = alloca [18 x i32], align 16
  %17 = alloca [8 x i32], align 16
  %18 = load i32, ptr %1, align 8, !tbaa !5
  %19 = zext i32 %18 to i64
  %20 = getelementptr inbounds [19 x i8], ptr @_ZN6basist22g_uastc_mode_has_alphaE, i64 0, i64 %19
  %21 = load i8, ptr %20, align 1, !tbaa !14
  %.not = icmp ne i8 %21, 0
  %.not201 = icmp ne i32 %18, 8
  %or.cond.not215 = and i1 %.not201, %.not
  %22 = load i16, ptr %4, align 2
  %.not202 = icmp ult i16 %22, 4096
  %or.cond214 = select i1 %or.cond.not215, i1 %.not202, i1 false
  br i1 %or.cond214, label %23, label %24

23:                                               ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.3, i32 noundef 115, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

24:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %8, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #9
  store i32 0, ptr %9, align 4, !tbaa !15
  %25 = getelementptr inbounds [20 x [2 x i32]], ptr @_ZN6basist23g_uastc_mode_huff_codesE, i64 0, i64 %19
  %26 = load i32, ptr %25, align 8, !tbaa !15
  %27 = zext i32 %26 to i64
  %28 = getelementptr inbounds i8, ptr %25, i64 4
  %29 = load i32, ptr %28, align 4, !tbaa !15
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %27, i32 noundef %29, ptr noundef nonnull @.str.4)
  %30 = load i32, ptr %1, align 8, !tbaa !5
  %31 = icmp eq i32 %30, 8
  br i1 %31, label %32, label %63

32:                                               ; preds = %24
  %33 = getelementptr inbounds i8, ptr %1, i64 112
  %34 = load i8, ptr %33, align 8, !tbaa !14
  %35 = zext i8 %34 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %35, i32 noundef 8, ptr noundef nonnull @.str.5)
  %36 = getelementptr inbounds i8, ptr %1, i64 113
  %37 = load i8, ptr %36, align 1, !tbaa !14
  %38 = zext i8 %37 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %38, i32 noundef 8, ptr noundef nonnull @.str.6)
  %39 = getelementptr inbounds i8, ptr %1, i64 114
  %40 = load i8, ptr %39, align 2, !tbaa !14
  %41 = zext i8 %40 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %41, i32 noundef 8, ptr noundef nonnull @.str.7)
  %42 = getelementptr inbounds i8, ptr %1, i64 115
  %43 = load i8, ptr %42, align 1, !tbaa !14
  %44 = zext i8 %43 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %44, i32 noundef 8, ptr noundef nonnull @.str.8)
  %45 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %46 = zext i1 %45 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %46, i32 noundef 1, ptr noundef nonnull @.str.9)
  %47 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 0)
  %48 = zext i32 %47 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %48, i32 noundef 3, ptr noundef nonnull @.str.10)
  %49 = call noundef i32 @_ZNK6basisu9etc_block12get_selectorEjj(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 0, i32 noundef 0)
  %50 = zext i32 %49 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %50, i32 noundef 2, ptr noundef nonnull @.str.11)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #9
  %51 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  br i1 %51, label %52, label %54

52:                                               ; preds = %32
  %53 = call noundef zeroext i16 @_ZNK6basisu9etc_block15get_base5_colorEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @_ZN6basisu9etc_block13unpack_color5ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, i16 noundef zeroext %53, i1 noundef zeroext false)
  br label %56

54:                                               ; preds = %32
  %55 = call noundef zeroext i16 @_ZNK6basisu9etc_block15get_base4_colorEj(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 0)
  call void @_ZN6basisu9etc_block13unpack_color4ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, i16 noundef zeroext %55, i1 noundef zeroext false)
  br label %56

56:                                               ; preds = %54, %52
  %57 = load i32, ptr %10, align 4, !tbaa !15
  %58 = zext i32 %57 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %58, i32 noundef 5, ptr noundef nonnull @.str.12)
  %59 = load i32, ptr %11, align 4, !tbaa !15
  %60 = zext i32 %59 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %60, i32 noundef 5, ptr noundef nonnull @.str.13)
  %61 = load i32, ptr %12, align 4, !tbaa !15
  %62 = zext i32 %61 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %62, i32 noundef 5, ptr noundef nonnull @.str.14)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 16 dereferenceable(16) %8, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  br label %991

63:                                               ; preds = %24
  %64 = zext i32 %30 to i64
  %65 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_bc1_hint0E, i64 0, i64 %64
  %66 = load i8, ptr %65, align 1, !tbaa !14
  %.not203 = icmp eq i8 %66, 0
  br i1 %.not203, label %69, label %67

67:                                               ; preds = %63
  %68 = zext i1 %5 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %68, i32 noundef 1, ptr noundef nonnull @.str.15)
  %.pre = load i32, ptr %1, align 8, !tbaa !5
  %.pre377 = zext i32 %.pre to i64
  br label %71

69:                                               ; preds = %63
  br i1 %5, label %70, label %71

70:                                               ; preds = %69
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.3, i32 noundef 158, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

71:                                               ; preds = %69, %67
  %.pre-phi = phi i64 [ %64, %69 ], [ %.pre377, %67 ]
  %72 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_bc1_hint1E, i64 0, i64 %.pre-phi
  %73 = load i8, ptr %72, align 1, !tbaa !14
  %.not204 = icmp eq i8 %73, 0
  br i1 %.not204, label %76, label %74

74:                                               ; preds = %71
  %75 = zext i1 %6 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %75, i32 noundef 1, ptr noundef nonnull @.str.17)
  br label %78

76:                                               ; preds = %71
  br i1 %6, label %77, label %78

77:                                               ; preds = %76
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.3, i32 noundef 165, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

78:                                               ; preds = %76, %74
  %79 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_flip_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %80 = zext i1 %79 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %80, i32 noundef 1, ptr noundef nonnull @.str.19)
  %81 = call noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %82 = zext i1 %81 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %82, i32 noundef 1, ptr noundef nonnull @.str.9)
  %83 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 0)
  %84 = zext i32 %83 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %84, i32 noundef 3, ptr noundef nonnull @.str.20)
  %85 = call noundef i32 @_ZNK6basisu9etc_block15get_inten_tableEj(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 1)
  %86 = zext i32 %85 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %86, i32 noundef 3, ptr noundef nonnull @.str.21)
  %87 = load i32, ptr %1, align 8, !tbaa !5
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds [19 x i8], ptr @_ZN6basist26g_uastc_mode_has_etc1_biasE, i64 0, i64 %88
  %90 = load i8, ptr %89, align 1, !tbaa !14
  %.not205 = icmp eq i8 %90, 0
  br i1 %.not205, label %93, label %91

91:                                               ; preds = %78
  %92 = zext i32 %3 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %92, i32 noundef 5, ptr noundef nonnull @.str.22)
  %.pre375 = load i32, ptr %1, align 8, !tbaa !5
  %.pre378 = zext i32 %.pre375 to i64
  br label %96

93:                                               ; preds = %78
  %94 = icmp eq i32 %3, 0
  br i1 %94, label %96, label %95

95:                                               ; preds = %93
  call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.3, i32 noundef 177, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

96:                                               ; preds = %93, %91
  %.pre-phi379 = phi i64 [ %88, %93 ], [ %.pre378, %91 ]
  %97 = phi i32 [ %87, %93 ], [ %.pre375, %91 ]
  %98 = getelementptr inbounds [19 x i8], ptr @_ZN6basist22g_uastc_mode_has_alphaE, i64 0, i64 %.pre-phi379
  %99 = load i8, ptr %98, align 1, !tbaa !14
  %.not206 = icmp eq i8 %99, 0
  br i1 %.not206, label %106, label %100

100:                                              ; preds = %96
  %101 = load i16, ptr %4, align 2
  %.not207 = icmp ult i16 %101, 256
  br i1 %.not207, label %102, label %103

102:                                              ; preds = %100
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.3, i32 noundef 184, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

103:                                              ; preds = %100
  %104 = lshr i16 %101, 8
  %105 = zext nneg i16 %104 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %105, i32 noundef 8, ptr noundef nonnull @.str.25)
  %.pr = load i32, ptr %1, align 8, !tbaa !5
  br label %106

106:                                              ; preds = %103, %96
  %107 = phi i32 [ %.pr, %103 ], [ %97, %96 ]
  %switch.tableidx = add i32 %107, -2
  %108 = icmp ult i32 %switch.tableidx, 15
  br i1 %108, label %switch.hole_check, label %114

switch.hole_check:                                ; preds = %106
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 16551, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %114

switch.lookup:                                    ; preds = %switch.hole_check
  %109 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [15 x i32], ptr @switch.table._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb, i64 0, i64 %109
  %switch.load = load i32, ptr %switch.gep, align 4
  %110 = zext nneg i32 %switch.tableidx to i64
  %switch.gep399 = getelementptr inbounds [15 x i32], ptr @switch.table._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb.1, i64 0, i64 %110
  %switch.load400 = load i32, ptr %switch.gep399, align 4
  %111 = getelementptr inbounds i8, ptr %1, i64 4
  %112 = load i32, ptr %111, align 4, !tbaa !16
  %113 = zext i32 %112 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %113, i32 noundef %switch.load, ptr noundef nonnull @.str.26)
  br label %114

114:                                              ; preds = %switch.hole_check, %106, %switch.lookup
  %.0176 = phi i32 [ 1, %106 ], [ %switch.load400, %switch.lookup ], [ 1, %switch.hole_check ]
  %115 = load i32, ptr %1, align 8, !tbaa !5
  switch i32 %115, label %125 [
    i32 6, label %116
    i32 11, label %116
    i32 13, label %116
    i32 17, label %120
  ]

116:                                              ; preds = %114, %114, %114
  %117 = getelementptr inbounds i8, ptr %1, i64 24
  %118 = load i32, ptr %117, align 8, !tbaa !17
  %119 = sext i32 %118 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %119, i32 noundef 2, ptr noundef nonnull @.str.27)
  %.pre376 = load i32, ptr %1, align 8, !tbaa !5
  br label %125

120:                                              ; preds = %114
  %121 = getelementptr inbounds i8, ptr %1, i64 24
  %122 = load i32, ptr %121, align 8, !tbaa !17
  %123 = icmp eq i32 %122, 3
  br i1 %123, label %125, label %124

124:                                              ; preds = %120
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.3, i32 noundef 239, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

125:                                              ; preds = %120, %114, %116
  %126 = phi i32 [ %115, %114 ], [ %.pre376, %116 ], [ 17, %120 ]
  %127 = phi i32 [ 0, %114 ], [ 1, %116 ], [ 1, %120 ]
  %128 = phi i1 [ false, %114 ], [ true, %116 ], [ true, %120 ]
  %.0179 = phi i32 [ 1, %114 ], [ 2, %116 ], [ 2, %120 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #9
  %129 = getelementptr inbounds i8, ptr %1, i64 47
  %130 = shl nuw nsw i32 %.0179, 4
  %131 = zext nneg i32 %130 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(1) %13, ptr noundef nonnull align 1 dereferenceable(1) %129, i64 %131, i1 false)
  call void @llvm.lifetime.start.p0(i64 18, ptr nonnull %14) #9
  %132 = getelementptr inbounds i8, ptr %1, i64 29
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(18) %14, ptr noundef nonnull align 1 dereferenceable(18) %132, i64 18, i1 false)
  %133 = zext i32 %126 to i64
  %134 = getelementptr inbounds [19 x i8], ptr @_ZN6basist18g_uastc_mode_compsE, i64 0, i64 %133
  %135 = load i8, ptr %134, align 1, !tbaa !14
  %.fr266 = freeze i8 %135
  %136 = zext i8 %.fr266 to i32
  %137 = getelementptr inbounds [19 x i8], ptr @_ZN6basist24g_uastc_mode_weight_bitsE, i64 0, i64 %133
  %138 = load i8, ptr %137, align 1, !tbaa !14
  %139 = zext i8 %138 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %140 = getelementptr inbounds i8, ptr %1, i64 4
  %141 = load i32, ptr %140, align 4, !tbaa !16
  %142 = call noundef ptr @_ZN6basist18get_anchor_indicesEjjjRPKh(i32 noundef %.0176, i32 noundef %126, i32 noundef %141, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %143 = add nsw i32 %139, -1
  %144 = shl nuw i32 1, %143
  %notmask213 = shl nsw i32 -1, %139
  %145 = trunc i32 %notmask213 to i8
  %146 = xor i8 %145, -1
  %.not265 = icmp eq i8 %.fr266, 0
  %147 = icmp eq i8 %.fr266, 2
  %148 = getelementptr inbounds i8, ptr %1, i64 24
  %149 = zext nneg i32 %.0179 to i64
  br i1 %128, label %.split240.us, label %.preheader223.preheader

.preheader223.preheader:                          ; preds = %125
  %150 = zext i8 %.fr266 to i64
  %wide.trip.count281 = zext nneg i32 %.0176 to i64
  %151 = shl nuw nsw i64 %149, 1
  %152 = mul nuw nsw i64 %149, 3
  %153 = shl nuw nsw i64 %149, 2
  %154 = mul nuw nsw i64 %149, 5
  %155 = mul nuw nsw i64 %149, 6
  %156 = mul nuw nsw i64 %149, 7
  %157 = shl nuw nsw i64 %149, 3
  %158 = mul nuw nsw i64 %149, 9
  %159 = mul nuw nsw i64 %149, 10
  %160 = mul nuw nsw i64 %149, 11
  %161 = mul nuw nsw i64 %149, 12
  %162 = mul nuw nsw i64 %149, 13
  %163 = mul nuw nsw i64 %149, 14
  %164 = mul nuw nsw i64 %149, 15
  br label %.preheader223

.split240.us:                                     ; preds = %125
  %wide.trip.count333 = zext nneg i32 %.0176 to i64
  br i1 %.not265, label %.preheader223.us.preheader, label %.split240.us.split.us

.preheader223.us.preheader:                       ; preds = %.split240.us
  %165 = load ptr, ptr %15, align 8
  %166 = getelementptr inbounds i8, ptr %165, i64 1
  %167 = getelementptr inbounds i8, ptr %165, i64 2
  %168 = shl nuw nsw i64 %149, 1
  %169 = getelementptr inbounds i8, ptr %165, i64 3
  %170 = mul nuw nsw i64 %149, 3
  %171 = getelementptr inbounds i8, ptr %165, i64 4
  %172 = shl nuw nsw i64 %149, 2
  %173 = getelementptr inbounds i8, ptr %165, i64 5
  %174 = mul nuw nsw i64 %149, 5
  %175 = getelementptr inbounds i8, ptr %165, i64 6
  %176 = mul nuw nsw i64 %149, 6
  %177 = getelementptr inbounds i8, ptr %165, i64 7
  %178 = mul nuw nsw i64 %149, 7
  %179 = getelementptr inbounds i8, ptr %165, i64 8
  %180 = shl nuw nsw i64 %149, 3
  %181 = getelementptr inbounds i8, ptr %165, i64 9
  %182 = mul nuw nsw i64 %149, 9
  %183 = getelementptr inbounds i8, ptr %165, i64 10
  %184 = mul nuw nsw i64 %149, 10
  %185 = getelementptr inbounds i8, ptr %165, i64 11
  %186 = mul nuw nsw i64 %149, 11
  %187 = getelementptr inbounds i8, ptr %165, i64 12
  %188 = mul nuw nsw i64 %149, 12
  %189 = getelementptr inbounds i8, ptr %165, i64 13
  %190 = mul nuw nsw i64 %149, 13
  %191 = getelementptr inbounds i8, ptr %165, i64 14
  %192 = mul nuw nsw i64 %149, 14
  %193 = getelementptr inbounds i8, ptr %165, i64 15
  %194 = mul nuw nsw i64 %149, 15
  br label %.preheader223.us

.split240.us.split.us:                            ; preds = %.split240.us
  %195 = shl nuw nsw i64 %149, 1
  %196 = mul nuw nsw i64 %149, 3
  %197 = shl nuw nsw i64 %149, 2
  %198 = mul nuw nsw i64 %149, 5
  %199 = mul nuw nsw i64 %149, 6
  %200 = mul nuw nsw i64 %149, 7
  %201 = shl nuw nsw i64 %149, 3
  %202 = mul nuw nsw i64 %149, 9
  %203 = mul nuw nsw i64 %149, 10
  %204 = mul nuw nsw i64 %149, 11
  %205 = mul nuw nsw i64 %149, 12
  %206 = mul nuw nsw i64 %149, 13
  %207 = mul nuw nsw i64 %149, 14
  %208 = mul nuw nsw i64 %149, 15
  %wide.trip.count314 = zext i8 %.fr266 to i64
  br i1 %147, label %.preheader223.us.us.us, label %.preheader223.us.us

.preheader223.us.us.us:                           ; preds = %.split240.us.split.us, %.split.us.us.split.us.us.split.us.us
  %indvars.iv321 = phi i64 [ %indvars.iv.next322, %.split.us.us.split.us.us.split.us.us ], [ 0, %.split240.us.split.us ]
  %209 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %indvars.iv321
  %210 = add nuw nsw i64 %indvars.iv321, %149
  %211 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %210
  %212 = add nuw nsw i64 %195, %indvars.iv321
  %213 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %212
  %214 = add nuw nsw i64 %196, %indvars.iv321
  %215 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %214
  %216 = add nuw nsw i64 %197, %indvars.iv321
  %217 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %216
  %218 = add nuw nsw i64 %198, %indvars.iv321
  %219 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %218
  %220 = add nuw nsw i64 %199, %indvars.iv321
  %221 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %220
  %222 = add nuw nsw i64 %200, %indvars.iv321
  %223 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %222
  %224 = add nuw nsw i64 %201, %indvars.iv321
  %225 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %224
  %226 = add nuw nsw i64 %202, %indvars.iv321
  %227 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %226
  %228 = add nuw nsw i64 %203, %indvars.iv321
  %229 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %228
  %230 = add nuw nsw i64 %204, %indvars.iv321
  %231 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %230
  %232 = add nuw nsw i64 %205, %indvars.iv321
  %233 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %232
  %234 = add nuw nsw i64 %206, %indvars.iv321
  %235 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %234
  %236 = add nuw nsw i64 %207, %indvars.iv321
  %237 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %236
  %238 = add nuw nsw i64 %208, %indvars.iv321
  %239 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %238
  %240 = shl nuw nsw i64 %indvars.iv321, 1
  %241 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %240
  %242 = or disjoint i64 %240, 1
  %243 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %242
  br label %244

244:                                              ; preds = %..loopexit219_crit_edge.split.us.us.us.us.us.us.us, %.preheader223.us.us.us
  %indvars.iv316 = phi i64 [ %indvars.iv.next317, %..loopexit219_crit_edge.split.us.us.us.us.us.us.us ], [ 0, %.preheader223.us.us.us ]
  %245 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv316
  %246 = load i8, ptr %245, align 1, !tbaa !14
  %247 = zext i8 %246 to i32
  %248 = mul nuw nsw i32 %.0179, %247
  %249 = zext nneg i32 %248 to i64
  %250 = add nuw nsw i64 %indvars.iv321, %249
  %251 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %250
  %252 = load i8, ptr %251, align 1, !tbaa !14
  %253 = zext i8 %252 to i32
  %254 = and i32 %144, %253
  %.not212.us.us.us.us.us.us = icmp eq i32 %254, 0
  br i1 %.not212.us.us.us.us.us.us, label %..loopexit219_crit_edge.split.us.us.us.us.us.us.us, label %.preheader222.us.us.us.us.us.us

255:                                              ; preds = %.preheader222.us.us.us.us.us.us
  %256 = load i8, ptr %209, align 1, !tbaa !14
  %257 = sub i8 %146, %256
  store i8 %257, ptr %209, align 1, !tbaa !14
  br label %258

258:                                              ; preds = %255, %.preheader222.us.us.us.us.us.us
  %259 = getelementptr inbounds i8, ptr %378, i64 1
  %260 = load i8, ptr %259, align 1, !tbaa !14
  %261 = zext i8 %260 to i64
  %262 = icmp eq i64 %indvars.iv316, %261
  br i1 %262, label %263, label %266

263:                                              ; preds = %258
  %264 = load i8, ptr %211, align 1, !tbaa !14
  %265 = sub i8 %146, %264
  store i8 %265, ptr %211, align 1, !tbaa !14
  br label %266

266:                                              ; preds = %263, %258
  %267 = getelementptr inbounds i8, ptr %378, i64 2
  %268 = load i8, ptr %267, align 1, !tbaa !14
  %269 = zext i8 %268 to i64
  %270 = icmp eq i64 %indvars.iv316, %269
  br i1 %270, label %271, label %274

271:                                              ; preds = %266
  %272 = load i8, ptr %213, align 1, !tbaa !14
  %273 = sub i8 %146, %272
  store i8 %273, ptr %213, align 1, !tbaa !14
  br label %274

274:                                              ; preds = %271, %266
  %275 = getelementptr inbounds i8, ptr %378, i64 3
  %276 = load i8, ptr %275, align 1, !tbaa !14
  %277 = zext i8 %276 to i64
  %278 = icmp eq i64 %indvars.iv316, %277
  br i1 %278, label %279, label %282

279:                                              ; preds = %274
  %280 = load i8, ptr %215, align 1, !tbaa !14
  %281 = sub i8 %146, %280
  store i8 %281, ptr %215, align 1, !tbaa !14
  br label %282

282:                                              ; preds = %279, %274
  %283 = getelementptr inbounds i8, ptr %378, i64 4
  %284 = load i8, ptr %283, align 1, !tbaa !14
  %285 = zext i8 %284 to i64
  %286 = icmp eq i64 %indvars.iv316, %285
  br i1 %286, label %287, label %290

287:                                              ; preds = %282
  %288 = load i8, ptr %217, align 1, !tbaa !14
  %289 = sub i8 %146, %288
  store i8 %289, ptr %217, align 1, !tbaa !14
  br label %290

290:                                              ; preds = %287, %282
  %291 = getelementptr inbounds i8, ptr %378, i64 5
  %292 = load i8, ptr %291, align 1, !tbaa !14
  %293 = zext i8 %292 to i64
  %294 = icmp eq i64 %indvars.iv316, %293
  br i1 %294, label %295, label %298

295:                                              ; preds = %290
  %296 = load i8, ptr %219, align 1, !tbaa !14
  %297 = sub i8 %146, %296
  store i8 %297, ptr %219, align 1, !tbaa !14
  br label %298

298:                                              ; preds = %295, %290
  %299 = getelementptr inbounds i8, ptr %378, i64 6
  %300 = load i8, ptr %299, align 1, !tbaa !14
  %301 = zext i8 %300 to i64
  %302 = icmp eq i64 %indvars.iv316, %301
  br i1 %302, label %303, label %306

303:                                              ; preds = %298
  %304 = load i8, ptr %221, align 1, !tbaa !14
  %305 = sub i8 %146, %304
  store i8 %305, ptr %221, align 1, !tbaa !14
  br label %306

306:                                              ; preds = %303, %298
  %307 = getelementptr inbounds i8, ptr %378, i64 7
  %308 = load i8, ptr %307, align 1, !tbaa !14
  %309 = zext i8 %308 to i64
  %310 = icmp eq i64 %indvars.iv316, %309
  br i1 %310, label %311, label %314

311:                                              ; preds = %306
  %312 = load i8, ptr %223, align 1, !tbaa !14
  %313 = sub i8 %146, %312
  store i8 %313, ptr %223, align 1, !tbaa !14
  br label %314

314:                                              ; preds = %311, %306
  %315 = getelementptr inbounds i8, ptr %378, i64 8
  %316 = load i8, ptr %315, align 1, !tbaa !14
  %317 = zext i8 %316 to i64
  %318 = icmp eq i64 %indvars.iv316, %317
  br i1 %318, label %319, label %322

319:                                              ; preds = %314
  %320 = load i8, ptr %225, align 1, !tbaa !14
  %321 = sub i8 %146, %320
  store i8 %321, ptr %225, align 1, !tbaa !14
  br label %322

322:                                              ; preds = %319, %314
  %323 = getelementptr inbounds i8, ptr %378, i64 9
  %324 = load i8, ptr %323, align 1, !tbaa !14
  %325 = zext i8 %324 to i64
  %326 = icmp eq i64 %indvars.iv316, %325
  br i1 %326, label %327, label %330

327:                                              ; preds = %322
  %328 = load i8, ptr %227, align 1, !tbaa !14
  %329 = sub i8 %146, %328
  store i8 %329, ptr %227, align 1, !tbaa !14
  br label %330

330:                                              ; preds = %327, %322
  %331 = getelementptr inbounds i8, ptr %378, i64 10
  %332 = load i8, ptr %331, align 1, !tbaa !14
  %333 = zext i8 %332 to i64
  %334 = icmp eq i64 %indvars.iv316, %333
  br i1 %334, label %335, label %338

335:                                              ; preds = %330
  %336 = load i8, ptr %229, align 1, !tbaa !14
  %337 = sub i8 %146, %336
  store i8 %337, ptr %229, align 1, !tbaa !14
  br label %338

338:                                              ; preds = %335, %330
  %339 = getelementptr inbounds i8, ptr %378, i64 11
  %340 = load i8, ptr %339, align 1, !tbaa !14
  %341 = zext i8 %340 to i64
  %342 = icmp eq i64 %indvars.iv316, %341
  br i1 %342, label %343, label %346

343:                                              ; preds = %338
  %344 = load i8, ptr %231, align 1, !tbaa !14
  %345 = sub i8 %146, %344
  store i8 %345, ptr %231, align 1, !tbaa !14
  br label %346

346:                                              ; preds = %343, %338
  %347 = getelementptr inbounds i8, ptr %378, i64 12
  %348 = load i8, ptr %347, align 1, !tbaa !14
  %349 = zext i8 %348 to i64
  %350 = icmp eq i64 %indvars.iv316, %349
  br i1 %350, label %351, label %354

351:                                              ; preds = %346
  %352 = load i8, ptr %233, align 1, !tbaa !14
  %353 = sub i8 %146, %352
  store i8 %353, ptr %233, align 1, !tbaa !14
  br label %354

354:                                              ; preds = %351, %346
  %355 = getelementptr inbounds i8, ptr %378, i64 13
  %356 = load i8, ptr %355, align 1, !tbaa !14
  %357 = zext i8 %356 to i64
  %358 = icmp eq i64 %indvars.iv316, %357
  br i1 %358, label %359, label %362

359:                                              ; preds = %354
  %360 = load i8, ptr %235, align 1, !tbaa !14
  %361 = sub i8 %146, %360
  store i8 %361, ptr %235, align 1, !tbaa !14
  br label %362

362:                                              ; preds = %359, %354
  %363 = getelementptr inbounds i8, ptr %378, i64 14
  %364 = load i8, ptr %363, align 1, !tbaa !14
  %365 = zext i8 %364 to i64
  %366 = icmp eq i64 %indvars.iv316, %365
  br i1 %366, label %367, label %370

367:                                              ; preds = %362
  %368 = load i8, ptr %237, align 1, !tbaa !14
  %369 = sub i8 %146, %368
  store i8 %369, ptr %237, align 1, !tbaa !14
  br label %370

370:                                              ; preds = %367, %362
  %371 = getelementptr inbounds i8, ptr %378, i64 15
  %372 = load i8, ptr %371, align 1, !tbaa !14
  %373 = zext i8 %372 to i64
  %374 = icmp eq i64 %indvars.iv316, %373
  br i1 %374, label %375, label %.preheader218.us.us.us.us.us.us.preheader

.preheader218.us.us.us.us.us.us.preheader:        ; preds = %375, %370
  br label %.preheader218.us.us.us.us.us.us

375:                                              ; preds = %370
  %376 = load i8, ptr %239, align 1, !tbaa !14
  %377 = sub i8 %146, %376
  store i8 %377, ptr %239, align 1, !tbaa !14
  br label %.preheader218.us.us.us.us.us.us.preheader

..loopexit219_crit_edge.split.us.us.us.us.us.us.us: ; preds = %384, %244
  %indvars.iv.next317 = add nuw nsw i64 %indvars.iv316, 1
  %exitcond320.not = icmp eq i64 %indvars.iv.next317, %wide.trip.count333
  br i1 %exitcond320.not, label %.split.us.us.split.us.us.split.us.us, label %244, !llvm.loop !18

.preheader222.us.us.us.us.us.us:                  ; preds = %244
  %378 = load ptr, ptr %15, align 8, !tbaa !20
  %379 = load i8, ptr %378, align 1, !tbaa !14
  %380 = zext i8 %379 to i64
  %381 = icmp eq i64 %indvars.iv316, %380
  br i1 %381, label %255, label %258

.preheader218.us.us.us.us.us.us:                  ; preds = %.preheader218.us.us.us.us.us.us.preheader, %384
  %indvars.iv311 = phi i64 [ %indvars.iv.next312, %384 ], [ 0, %.preheader218.us.us.us.us.us.us.preheader ]
  %382 = icmp eq i64 %indvars.iv311, %indvars.iv321
  br i1 %382, label %383, label %384

383:                                              ; preds = %.preheader218.us.us.us.us.us.us
  call void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %241, ptr noundef nonnull align 1 dereferenceable(1) %243) #9
  br label %384

384:                                              ; preds = %383, %.preheader218.us.us.us.us.us.us
  %indvars.iv.next312 = add nuw nsw i64 %indvars.iv311, 1
  %exitcond315.not = icmp eq i64 %indvars.iv.next312, %wide.trip.count314
  br i1 %exitcond315.not, label %..loopexit219_crit_edge.split.us.us.us.us.us.us.us, label %.preheader218.us.us.us.us.us.us, !llvm.loop !22

.split.us.us.split.us.us.split.us.us:             ; preds = %..loopexit219_crit_edge.split.us.us.us.us.us.us.us
  %indvars.iv.next322 = add nuw nsw i64 %indvars.iv321, 1
  %exitcond325.not = icmp eq i64 %indvars.iv.next322, %149
  br i1 %exitcond325.not, label %.split242.us, label %.preheader223.us.us.us, !llvm.loop !23

.preheader223.us.us:                              ; preds = %.split240.us.split.us, %.split.us.us.split.us.us.split
  %indvars.iv302 = phi i64 [ %indvars.iv.next303, %.split.us.us.split.us.us.split ], [ 0, %.split240.us.split.us ]
  %385 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %indvars.iv302
  %386 = add nuw nsw i64 %indvars.iv302, %149
  %387 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %386
  %388 = add nuw nsw i64 %195, %indvars.iv302
  %389 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %388
  %390 = add nuw nsw i64 %196, %indvars.iv302
  %391 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %390
  %392 = add nuw nsw i64 %197, %indvars.iv302
  %393 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %392
  %394 = add nuw nsw i64 %198, %indvars.iv302
  %395 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %394
  %396 = add nuw nsw i64 %199, %indvars.iv302
  %397 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %396
  %398 = add nuw nsw i64 %200, %indvars.iv302
  %399 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %398
  %400 = add nuw nsw i64 %201, %indvars.iv302
  %401 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %400
  %402 = add nuw nsw i64 %202, %indvars.iv302
  %403 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %402
  %404 = add nuw nsw i64 %203, %indvars.iv302
  %405 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %404
  %406 = add nuw nsw i64 %204, %indvars.iv302
  %407 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %406
  %408 = add nuw nsw i64 %205, %indvars.iv302
  %409 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %408
  %410 = add nuw nsw i64 %206, %indvars.iv302
  %411 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %410
  %412 = add nuw nsw i64 %207, %indvars.iv302
  %413 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %412
  %414 = add nuw nsw i64 %208, %indvars.iv302
  %415 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %414
  br label %416

416:                                              ; preds = %..loopexit219_crit_edge.split.us237.us.us.us, %.preheader223.us.us
  %indvars.iv297 = phi i64 [ %indvars.iv.next298, %..loopexit219_crit_edge.split.us237.us.us.us ], [ 0, %.preheader223.us.us ]
  %417 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv297
  %418 = load i8, ptr %417, align 1, !tbaa !14
  %419 = zext i8 %418 to i32
  %420 = mul nuw nsw i32 %.0179, %419
  %421 = zext nneg i32 %420 to i64
  %422 = add nuw nsw i64 %indvars.iv302, %421
  %423 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %422
  %424 = load i8, ptr %423, align 1, !tbaa !14
  %425 = zext i8 %424 to i32
  %426 = and i32 %144, %425
  %.not212.us.us.us.us = icmp eq i32 %426, 0
  br i1 %.not212.us.us.us.us, label %..loopexit219_crit_edge.split.us237.us.us.us, label %.preheader222.us.us.us.us

.preheader218.us.us.us.us:                        ; preds = %.preheader218.us.us.us.us.preheader, %437
  %indvars.iv292 = phi i64 [ %indvars.iv.next293, %437 ], [ 0, %.preheader218.us.us.us.us.preheader ]
  %427 = load i32, ptr %148, align 8
  %428 = zext i32 %427 to i64
  %429 = icmp eq i64 %indvars.iv292, %428
  %430 = zext i1 %429 to i64
  %431 = icmp eq i64 %indvars.iv302, %430
  br i1 %431, label %432, label %437

432:                                              ; preds = %.preheader218.us.us.us.us
  %433 = shl nuw nsw i64 %indvars.iv292, 1
  %434 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %433
  %435 = or disjoint i64 %433, 1
  %436 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %435
  call void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %434, ptr noundef nonnull align 1 dereferenceable(1) %436) #9
  br label %437

437:                                              ; preds = %432, %.preheader218.us.us.us.us
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %exitcond296.not = icmp eq i64 %indvars.iv.next293, %wide.trip.count314
  br i1 %exitcond296.not, label %..loopexit219_crit_edge.split.us237.us.us.us, label %.preheader218.us.us.us.us, !llvm.loop !22

438:                                              ; preds = %.preheader222.us.us.us.us
  %439 = load i8, ptr %385, align 1, !tbaa !14
  %440 = sub i8 %146, %439
  store i8 %440, ptr %385, align 1, !tbaa !14
  br label %441

441:                                              ; preds = %438, %.preheader222.us.us.us.us
  %442 = getelementptr inbounds i8, ptr %561, i64 1
  %443 = load i8, ptr %442, align 1, !tbaa !14
  %444 = zext i8 %443 to i64
  %445 = icmp eq i64 %indvars.iv297, %444
  br i1 %445, label %446, label %449

446:                                              ; preds = %441
  %447 = load i8, ptr %387, align 1, !tbaa !14
  %448 = sub i8 %146, %447
  store i8 %448, ptr %387, align 1, !tbaa !14
  br label %449

449:                                              ; preds = %446, %441
  %450 = getelementptr inbounds i8, ptr %561, i64 2
  %451 = load i8, ptr %450, align 1, !tbaa !14
  %452 = zext i8 %451 to i64
  %453 = icmp eq i64 %indvars.iv297, %452
  br i1 %453, label %454, label %457

454:                                              ; preds = %449
  %455 = load i8, ptr %389, align 1, !tbaa !14
  %456 = sub i8 %146, %455
  store i8 %456, ptr %389, align 1, !tbaa !14
  br label %457

457:                                              ; preds = %454, %449
  %458 = getelementptr inbounds i8, ptr %561, i64 3
  %459 = load i8, ptr %458, align 1, !tbaa !14
  %460 = zext i8 %459 to i64
  %461 = icmp eq i64 %indvars.iv297, %460
  br i1 %461, label %462, label %465

462:                                              ; preds = %457
  %463 = load i8, ptr %391, align 1, !tbaa !14
  %464 = sub i8 %146, %463
  store i8 %464, ptr %391, align 1, !tbaa !14
  br label %465

465:                                              ; preds = %462, %457
  %466 = getelementptr inbounds i8, ptr %561, i64 4
  %467 = load i8, ptr %466, align 1, !tbaa !14
  %468 = zext i8 %467 to i64
  %469 = icmp eq i64 %indvars.iv297, %468
  br i1 %469, label %470, label %473

470:                                              ; preds = %465
  %471 = load i8, ptr %393, align 1, !tbaa !14
  %472 = sub i8 %146, %471
  store i8 %472, ptr %393, align 1, !tbaa !14
  br label %473

473:                                              ; preds = %470, %465
  %474 = getelementptr inbounds i8, ptr %561, i64 5
  %475 = load i8, ptr %474, align 1, !tbaa !14
  %476 = zext i8 %475 to i64
  %477 = icmp eq i64 %indvars.iv297, %476
  br i1 %477, label %478, label %481

478:                                              ; preds = %473
  %479 = load i8, ptr %395, align 1, !tbaa !14
  %480 = sub i8 %146, %479
  store i8 %480, ptr %395, align 1, !tbaa !14
  br label %481

481:                                              ; preds = %478, %473
  %482 = getelementptr inbounds i8, ptr %561, i64 6
  %483 = load i8, ptr %482, align 1, !tbaa !14
  %484 = zext i8 %483 to i64
  %485 = icmp eq i64 %indvars.iv297, %484
  br i1 %485, label %486, label %489

486:                                              ; preds = %481
  %487 = load i8, ptr %397, align 1, !tbaa !14
  %488 = sub i8 %146, %487
  store i8 %488, ptr %397, align 1, !tbaa !14
  br label %489

489:                                              ; preds = %486, %481
  %490 = getelementptr inbounds i8, ptr %561, i64 7
  %491 = load i8, ptr %490, align 1, !tbaa !14
  %492 = zext i8 %491 to i64
  %493 = icmp eq i64 %indvars.iv297, %492
  br i1 %493, label %494, label %497

494:                                              ; preds = %489
  %495 = load i8, ptr %399, align 1, !tbaa !14
  %496 = sub i8 %146, %495
  store i8 %496, ptr %399, align 1, !tbaa !14
  br label %497

497:                                              ; preds = %494, %489
  %498 = getelementptr inbounds i8, ptr %561, i64 8
  %499 = load i8, ptr %498, align 1, !tbaa !14
  %500 = zext i8 %499 to i64
  %501 = icmp eq i64 %indvars.iv297, %500
  br i1 %501, label %502, label %505

502:                                              ; preds = %497
  %503 = load i8, ptr %401, align 1, !tbaa !14
  %504 = sub i8 %146, %503
  store i8 %504, ptr %401, align 1, !tbaa !14
  br label %505

505:                                              ; preds = %502, %497
  %506 = getelementptr inbounds i8, ptr %561, i64 9
  %507 = load i8, ptr %506, align 1, !tbaa !14
  %508 = zext i8 %507 to i64
  %509 = icmp eq i64 %indvars.iv297, %508
  br i1 %509, label %510, label %513

510:                                              ; preds = %505
  %511 = load i8, ptr %403, align 1, !tbaa !14
  %512 = sub i8 %146, %511
  store i8 %512, ptr %403, align 1, !tbaa !14
  br label %513

513:                                              ; preds = %510, %505
  %514 = getelementptr inbounds i8, ptr %561, i64 10
  %515 = load i8, ptr %514, align 1, !tbaa !14
  %516 = zext i8 %515 to i64
  %517 = icmp eq i64 %indvars.iv297, %516
  br i1 %517, label %518, label %521

518:                                              ; preds = %513
  %519 = load i8, ptr %405, align 1, !tbaa !14
  %520 = sub i8 %146, %519
  store i8 %520, ptr %405, align 1, !tbaa !14
  br label %521

521:                                              ; preds = %518, %513
  %522 = getelementptr inbounds i8, ptr %561, i64 11
  %523 = load i8, ptr %522, align 1, !tbaa !14
  %524 = zext i8 %523 to i64
  %525 = icmp eq i64 %indvars.iv297, %524
  br i1 %525, label %526, label %529

526:                                              ; preds = %521
  %527 = load i8, ptr %407, align 1, !tbaa !14
  %528 = sub i8 %146, %527
  store i8 %528, ptr %407, align 1, !tbaa !14
  br label %529

529:                                              ; preds = %526, %521
  %530 = getelementptr inbounds i8, ptr %561, i64 12
  %531 = load i8, ptr %530, align 1, !tbaa !14
  %532 = zext i8 %531 to i64
  %533 = icmp eq i64 %indvars.iv297, %532
  br i1 %533, label %534, label %537

534:                                              ; preds = %529
  %535 = load i8, ptr %409, align 1, !tbaa !14
  %536 = sub i8 %146, %535
  store i8 %536, ptr %409, align 1, !tbaa !14
  br label %537

537:                                              ; preds = %534, %529
  %538 = getelementptr inbounds i8, ptr %561, i64 13
  %539 = load i8, ptr %538, align 1, !tbaa !14
  %540 = zext i8 %539 to i64
  %541 = icmp eq i64 %indvars.iv297, %540
  br i1 %541, label %542, label %545

542:                                              ; preds = %537
  %543 = load i8, ptr %411, align 1, !tbaa !14
  %544 = sub i8 %146, %543
  store i8 %544, ptr %411, align 1, !tbaa !14
  br label %545

545:                                              ; preds = %542, %537
  %546 = getelementptr inbounds i8, ptr %561, i64 14
  %547 = load i8, ptr %546, align 1, !tbaa !14
  %548 = zext i8 %547 to i64
  %549 = icmp eq i64 %indvars.iv297, %548
  br i1 %549, label %550, label %553

550:                                              ; preds = %545
  %551 = load i8, ptr %413, align 1, !tbaa !14
  %552 = sub i8 %146, %551
  store i8 %552, ptr %413, align 1, !tbaa !14
  br label %553

553:                                              ; preds = %550, %545
  %554 = getelementptr inbounds i8, ptr %561, i64 15
  %555 = load i8, ptr %554, align 1, !tbaa !14
  %556 = zext i8 %555 to i64
  %557 = icmp eq i64 %indvars.iv297, %556
  br i1 %557, label %558, label %.preheader218.us.us.us.us.preheader

.preheader218.us.us.us.us.preheader:              ; preds = %558, %553
  br label %.preheader218.us.us.us.us

558:                                              ; preds = %553
  %559 = load i8, ptr %415, align 1, !tbaa !14
  %560 = sub i8 %146, %559
  store i8 %560, ptr %415, align 1, !tbaa !14
  br label %.preheader218.us.us.us.us.preheader

..loopexit219_crit_edge.split.us237.us.us.us:     ; preds = %437, %416
  %indvars.iv.next298 = add nuw nsw i64 %indvars.iv297, 1
  %exitcond301.not = icmp eq i64 %indvars.iv.next298, %wide.trip.count333
  br i1 %exitcond301.not, label %.split.us.us.split.us.us.split, label %416, !llvm.loop !18

.preheader222.us.us.us.us:                        ; preds = %416
  %561 = load ptr, ptr %15, align 8, !tbaa !20
  %562 = load i8, ptr %561, align 1, !tbaa !14
  %563 = zext i8 %562 to i64
  %564 = icmp eq i64 %indvars.iv297, %563
  br i1 %564, label %438, label %441

.split.us.us.split.us.us.split:                   ; preds = %..loopexit219_crit_edge.split.us237.us.us.us
  %indvars.iv.next303 = add nuw nsw i64 %indvars.iv302, 1
  %exitcond306.not = icmp eq i64 %indvars.iv.next303, %149
  br i1 %exitcond306.not, label %.split242.us, label %.preheader223.us.us, !llvm.loop !23

.preheader223.us:                                 ; preds = %.preheader223.us.preheader, %.split.us.us.split
  %indvars.iv335 = phi i64 [ 0, %.preheader223.us.preheader ], [ %indvars.iv.next336, %.split.us.us.split ]
  %565 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %indvars.iv335
  %566 = add nuw nsw i64 %indvars.iv335, %149
  %567 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %566
  %568 = add nuw nsw i64 %168, %indvars.iv335
  %569 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %568
  %570 = add nuw nsw i64 %170, %indvars.iv335
  %571 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %570
  %572 = add nuw nsw i64 %172, %indvars.iv335
  %573 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %572
  %574 = add nuw nsw i64 %174, %indvars.iv335
  %575 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %574
  %576 = add nuw nsw i64 %176, %indvars.iv335
  %577 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %576
  %578 = add nuw nsw i64 %178, %indvars.iv335
  %579 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %578
  %580 = add nuw nsw i64 %180, %indvars.iv335
  %581 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %580
  %582 = add nuw nsw i64 %182, %indvars.iv335
  %583 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %582
  %584 = add nuw nsw i64 %184, %indvars.iv335
  %585 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %584
  %586 = add nuw nsw i64 %186, %indvars.iv335
  %587 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %586
  %588 = add nuw nsw i64 %188, %indvars.iv335
  %589 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %588
  %590 = add nuw nsw i64 %190, %indvars.iv335
  %591 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %590
  %592 = add nuw nsw i64 %192, %indvars.iv335
  %593 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %592
  %594 = add nuw nsw i64 %194, %indvars.iv335
  %595 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %594
  br label %596

596:                                              ; preds = %.preheader218.us.us, %.preheader223.us
  %indvars.iv330 = phi i64 [ %indvars.iv.next331, %.preheader218.us.us ], [ 0, %.preheader223.us ]
  %597 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv330
  %598 = load i8, ptr %597, align 1, !tbaa !14
  %599 = zext i8 %598 to i32
  %600 = mul nuw nsw i32 %.0179, %599
  %601 = zext nneg i32 %600 to i64
  %602 = add nuw nsw i64 %indvars.iv335, %601
  %603 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %602
  %604 = load i8, ptr %603, align 1, !tbaa !14
  %605 = zext i8 %604 to i32
  %606 = and i32 %144, %605
  %.not212.us.us = icmp eq i32 %606, 0
  br i1 %.not212.us.us, label %.preheader218.us.us, label %.preheader222.us.us

607:                                              ; preds = %.preheader222.us.us
  %608 = load i8, ptr %565, align 1, !tbaa !14
  %609 = sub i8 %146, %608
  store i8 %609, ptr %565, align 1, !tbaa !14
  br label %610

610:                                              ; preds = %607, %.preheader222.us.us
  %611 = load i8, ptr %166, align 1, !tbaa !14
  %612 = zext i8 %611 to i64
  %613 = icmp eq i64 %indvars.iv330, %612
  br i1 %613, label %614, label %617

614:                                              ; preds = %610
  %615 = load i8, ptr %567, align 1, !tbaa !14
  %616 = sub i8 %146, %615
  store i8 %616, ptr %567, align 1, !tbaa !14
  br label %617

617:                                              ; preds = %614, %610
  %618 = load i8, ptr %167, align 1, !tbaa !14
  %619 = zext i8 %618 to i64
  %620 = icmp eq i64 %indvars.iv330, %619
  br i1 %620, label %621, label %624

621:                                              ; preds = %617
  %622 = load i8, ptr %569, align 1, !tbaa !14
  %623 = sub i8 %146, %622
  store i8 %623, ptr %569, align 1, !tbaa !14
  br label %624

624:                                              ; preds = %621, %617
  %625 = load i8, ptr %169, align 1, !tbaa !14
  %626 = zext i8 %625 to i64
  %627 = icmp eq i64 %indvars.iv330, %626
  br i1 %627, label %628, label %631

628:                                              ; preds = %624
  %629 = load i8, ptr %571, align 1, !tbaa !14
  %630 = sub i8 %146, %629
  store i8 %630, ptr %571, align 1, !tbaa !14
  br label %631

631:                                              ; preds = %628, %624
  %632 = load i8, ptr %171, align 1, !tbaa !14
  %633 = zext i8 %632 to i64
  %634 = icmp eq i64 %indvars.iv330, %633
  br i1 %634, label %635, label %638

635:                                              ; preds = %631
  %636 = load i8, ptr %573, align 1, !tbaa !14
  %637 = sub i8 %146, %636
  store i8 %637, ptr %573, align 1, !tbaa !14
  br label %638

638:                                              ; preds = %635, %631
  %639 = load i8, ptr %173, align 1, !tbaa !14
  %640 = zext i8 %639 to i64
  %641 = icmp eq i64 %indvars.iv330, %640
  br i1 %641, label %642, label %645

642:                                              ; preds = %638
  %643 = load i8, ptr %575, align 1, !tbaa !14
  %644 = sub i8 %146, %643
  store i8 %644, ptr %575, align 1, !tbaa !14
  br label %645

645:                                              ; preds = %642, %638
  %646 = load i8, ptr %175, align 1, !tbaa !14
  %647 = zext i8 %646 to i64
  %648 = icmp eq i64 %indvars.iv330, %647
  br i1 %648, label %649, label %652

649:                                              ; preds = %645
  %650 = load i8, ptr %577, align 1, !tbaa !14
  %651 = sub i8 %146, %650
  store i8 %651, ptr %577, align 1, !tbaa !14
  br label %652

652:                                              ; preds = %649, %645
  %653 = load i8, ptr %177, align 1, !tbaa !14
  %654 = zext i8 %653 to i64
  %655 = icmp eq i64 %indvars.iv330, %654
  br i1 %655, label %656, label %659

656:                                              ; preds = %652
  %657 = load i8, ptr %579, align 1, !tbaa !14
  %658 = sub i8 %146, %657
  store i8 %658, ptr %579, align 1, !tbaa !14
  br label %659

659:                                              ; preds = %656, %652
  %660 = load i8, ptr %179, align 1, !tbaa !14
  %661 = zext i8 %660 to i64
  %662 = icmp eq i64 %indvars.iv330, %661
  br i1 %662, label %663, label %666

663:                                              ; preds = %659
  %664 = load i8, ptr %581, align 1, !tbaa !14
  %665 = sub i8 %146, %664
  store i8 %665, ptr %581, align 1, !tbaa !14
  br label %666

666:                                              ; preds = %663, %659
  %667 = load i8, ptr %181, align 1, !tbaa !14
  %668 = zext i8 %667 to i64
  %669 = icmp eq i64 %indvars.iv330, %668
  br i1 %669, label %670, label %673

670:                                              ; preds = %666
  %671 = load i8, ptr %583, align 1, !tbaa !14
  %672 = sub i8 %146, %671
  store i8 %672, ptr %583, align 1, !tbaa !14
  br label %673

673:                                              ; preds = %670, %666
  %674 = load i8, ptr %183, align 1, !tbaa !14
  %675 = zext i8 %674 to i64
  %676 = icmp eq i64 %indvars.iv330, %675
  br i1 %676, label %677, label %680

677:                                              ; preds = %673
  %678 = load i8, ptr %585, align 1, !tbaa !14
  %679 = sub i8 %146, %678
  store i8 %679, ptr %585, align 1, !tbaa !14
  br label %680

680:                                              ; preds = %677, %673
  %681 = load i8, ptr %185, align 1, !tbaa !14
  %682 = zext i8 %681 to i64
  %683 = icmp eq i64 %indvars.iv330, %682
  br i1 %683, label %684, label %687

684:                                              ; preds = %680
  %685 = load i8, ptr %587, align 1, !tbaa !14
  %686 = sub i8 %146, %685
  store i8 %686, ptr %587, align 1, !tbaa !14
  br label %687

687:                                              ; preds = %684, %680
  %688 = load i8, ptr %187, align 1, !tbaa !14
  %689 = zext i8 %688 to i64
  %690 = icmp eq i64 %indvars.iv330, %689
  br i1 %690, label %691, label %694

691:                                              ; preds = %687
  %692 = load i8, ptr %589, align 1, !tbaa !14
  %693 = sub i8 %146, %692
  store i8 %693, ptr %589, align 1, !tbaa !14
  br label %694

694:                                              ; preds = %691, %687
  %695 = load i8, ptr %189, align 1, !tbaa !14
  %696 = zext i8 %695 to i64
  %697 = icmp eq i64 %indvars.iv330, %696
  br i1 %697, label %698, label %701

698:                                              ; preds = %694
  %699 = load i8, ptr %591, align 1, !tbaa !14
  %700 = sub i8 %146, %699
  store i8 %700, ptr %591, align 1, !tbaa !14
  br label %701

701:                                              ; preds = %698, %694
  %702 = load i8, ptr %191, align 1, !tbaa !14
  %703 = zext i8 %702 to i64
  %704 = icmp eq i64 %indvars.iv330, %703
  br i1 %704, label %705, label %708

705:                                              ; preds = %701
  %706 = load i8, ptr %593, align 1, !tbaa !14
  %707 = sub i8 %146, %706
  store i8 %707, ptr %593, align 1, !tbaa !14
  br label %708

708:                                              ; preds = %705, %701
  %709 = load i8, ptr %193, align 1, !tbaa !14
  %710 = zext i8 %709 to i64
  %711 = icmp eq i64 %indvars.iv330, %710
  br i1 %711, label %712, label %.preheader218.us.us

712:                                              ; preds = %708
  %713 = load i8, ptr %595, align 1, !tbaa !14
  %714 = sub i8 %146, %713
  store i8 %714, ptr %595, align 1, !tbaa !14
  br label %.preheader218.us.us

.preheader218.us.us:                              ; preds = %708, %712, %596
  %indvars.iv.next331 = add nuw nsw i64 %indvars.iv330, 1
  %exitcond334.not = icmp eq i64 %indvars.iv.next331, %wide.trip.count333
  br i1 %exitcond334.not, label %.split.us.us.split, label %596, !llvm.loop !18

.preheader222.us.us:                              ; preds = %596
  %715 = load i8, ptr %165, align 1, !tbaa !14
  %716 = zext i8 %715 to i64
  %717 = icmp eq i64 %indvars.iv330, %716
  br i1 %717, label %607, label %610

.split.us.us.split:                               ; preds = %.preheader218.us.us
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %exitcond339.not = icmp eq i64 %indvars.iv.next336, %149
  br i1 %exitcond339.not, label %.split242.us, label %.preheader223.us, !llvm.loop !23

.preheader223:                                    ; preds = %.preheader223.preheader, %.split
  %indvars.iv283 = phi i64 [ 0, %.preheader223.preheader ], [ %indvars.iv.next284, %.split ]
  %718 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %indvars.iv283
  %719 = add nuw nsw i64 %indvars.iv283, %149
  %720 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %719
  %721 = add nuw nsw i64 %151, %indvars.iv283
  %722 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %721
  %723 = add nuw nsw i64 %152, %indvars.iv283
  %724 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %723
  %725 = add nuw nsw i64 %153, %indvars.iv283
  %726 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %725
  %727 = add nuw nsw i64 %154, %indvars.iv283
  %728 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %727
  %729 = add nuw nsw i64 %155, %indvars.iv283
  %730 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %729
  %731 = add nuw nsw i64 %156, %indvars.iv283
  %732 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %731
  %733 = add nuw nsw i64 %157, %indvars.iv283
  %734 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %733
  %735 = add nuw nsw i64 %158, %indvars.iv283
  %736 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %735
  %737 = add nuw nsw i64 %159, %indvars.iv283
  %738 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %737
  %739 = add nuw nsw i64 %160, %indvars.iv283
  %740 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %739
  %741 = add nuw nsw i64 %161, %indvars.iv283
  %742 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %741
  %743 = add nuw nsw i64 %162, %indvars.iv283
  %744 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %743
  %745 = add nuw nsw i64 %163, %indvars.iv283
  %746 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %745
  %747 = add nuw nsw i64 %164, %indvars.iv283
  %748 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %747
  br label %794

.split242.us:                                     ; preds = %.split, %.split.us.us.split.us.us.split, %.split.us.us.split.us.us.split.us.us, %.split.us.us.split
  %749 = shl nuw nsw i32 %136, 1
  %750 = mul nsw i32 %749, %.0176
  %751 = load i32, ptr %1, align 8, !tbaa !5
  %752 = zext i32 %751 to i64
  %753 = getelementptr inbounds [19 x i8], ptr @_ZN6basist28g_uastc_mode_endpoint_rangesE, i64 0, i64 %752
  %754 = load i8, ptr %753, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #9
  %755 = zext i8 %754 to i64
  %756 = getelementptr inbounds [21 x [3 x i32]], ptr @_ZN6basist23g_astc_bise_range_tableE, i64 0, i64 %755
  %757 = load i32, ptr %756, align 4, !tbaa !15
  %758 = getelementptr inbounds i8, ptr %756, i64 4
  %759 = load i32, ptr %758, align 4, !tbaa !15
  br i1 %.not265, label %.preheader216, label %.lr.ph248

.lr.ph248:                                        ; preds = %.split242.us
  %notmask = shl nsw i32 -1, %757
  %760 = xor i32 %notmask, -1
  %.not210 = icmp eq i32 %759, 0
  br i1 %.not210, label %.lr.ph248.split.us, label %.lr.ph248.split.preheader

.lr.ph248.split.preheader:                        ; preds = %.lr.ph248
  %wide.trip.count343 = zext nneg i32 %750 to i64
  br label %.lr.ph248.split

.lr.ph248.split.us:                               ; preds = %.lr.ph248
  %761 = getelementptr inbounds i8, ptr %756, i64 8
  %762 = load i32, ptr %761, align 4, !tbaa !15
  %.not211 = icmp eq i32 %762, 0
  %wide.trip.count353 = zext i32 %750 to i64
  br i1 %.not211, label %.lr.ph248.split.us.split.us.preheader, label %.lr.ph248.split.us.split

.lr.ph248.split.us.split.us.preheader:            ; preds = %.lr.ph248.split.us
  %min.iters.check = icmp ult i32 %750, 8
  br i1 %min.iters.check, label %.lr.ph248.split.us.split.us.preheader401, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph248.split.us.split.us.preheader
  %n.vec = and i64 %wide.trip.count353, 4294967288
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %760, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %763 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %index
  %764 = getelementptr inbounds i8, ptr %763, i64 4
  %wide.load = load <4 x i8>, ptr %763, align 8, !tbaa !14
  %wide.load398 = load <4 x i8>, ptr %764, align 4, !tbaa !14
  %765 = zext <4 x i8> %wide.load to <4 x i32>
  %766 = zext <4 x i8> %wide.load398 to <4 x i32>
  %767 = and <4 x i32> %broadcast.splat, %765
  %768 = and <4 x i32> %broadcast.splat, %766
  %769 = getelementptr inbounds [18 x i32], ptr %16, i64 0, i64 %index
  %770 = getelementptr inbounds i8, ptr %769, i64 16
  store <4 x i32> %767, ptr %769, align 16, !tbaa !15
  store <4 x i32> %768, ptr %770, align 16, !tbaa !15
  %index.next = add nuw i64 %index, 8
  %771 = icmp eq i64 %index.next, %n.vec
  br i1 %771, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count353
  br i1 %cmp.n, label %._crit_edge.thread, label %.lr.ph248.split.us.split.us.preheader401

.lr.ph248.split.us.split.us.preheader401:         ; preds = %middle.block, %.lr.ph248.split.us.split.us.preheader
  %indvars.iv350.ph = phi i64 [ 0, %.lr.ph248.split.us.split.us.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph248.split.us.split.us

.lr.ph248.split.us.split.us:                      ; preds = %.lr.ph248.split.us.split.us.preheader401, %.lr.ph248.split.us.split.us
  %indvars.iv350 = phi i64 [ %indvars.iv.next351, %.lr.ph248.split.us.split.us ], [ %indvars.iv350.ph, %.lr.ph248.split.us.split.us.preheader401 ]
  %772 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %indvars.iv350
  %773 = load i8, ptr %772, align 1, !tbaa !14
  %774 = zext i8 %773 to i32
  %775 = and i32 %774, %760
  %776 = getelementptr inbounds [18 x i32], ptr %16, i64 0, i64 %indvars.iv350
  store i32 %775, ptr %776, align 4, !tbaa !15
  %indvars.iv.next351 = add nuw nsw i64 %indvars.iv350, 1
  %exitcond354.not = icmp eq i64 %indvars.iv.next351, %wide.trip.count353
  br i1 %exitcond354.not, label %._crit_edge.thread, label %.lr.ph248.split.us.split.us, !llvm.loop !27

.lr.ph248.split.us.split:                         ; preds = %.lr.ph248.split.us, %793
  %indvars.iv345 = phi i64 [ %indvars.iv.next346, %793 ], [ 0, %.lr.ph248.split.us ]
  %.0186246.us = phi i32 [ %.1187.us, %793 ], [ 1, %.lr.ph248.split.us ]
  %.0188245.us = phi i32 [ %.1189.us, %793 ], [ 0, %.lr.ph248.split.us ]
  %.0190244.us = phi i32 [ %.1191.us, %793 ], [ 0, %.lr.ph248.split.us ]
  %777 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %indvars.iv345
  %778 = load i8, ptr %777, align 1, !tbaa !14
  %779 = zext i8 %778 to i32
  %780 = and i32 %779, %760
  %781 = lshr i32 %779, %757
  %782 = getelementptr inbounds [18 x i32], ptr %16, i64 0, i64 %indvars.iv345
  store i32 %780, ptr %782, align 4, !tbaa !15
  %783 = icmp ult i32 %781, 5
  br i1 %783, label %784, label %.split252.us

784:                                              ; preds = %.lr.ph248.split.us.split
  %785 = mul i32 %781, %.0186246.us
  %786 = add i32 %785, %.0188245.us
  %787 = mul i32 %.0186246.us, 5
  %788 = icmp eq i32 %.0186246.us, 25
  br i1 %788, label %789, label %793

789:                                              ; preds = %784
  %790 = add i32 %.0190244.us, 1
  %791 = zext i32 %.0190244.us to i64
  %792 = getelementptr inbounds [8 x i32], ptr %17, i64 0, i64 %791
  store i32 %786, ptr %792, align 4, !tbaa !15
  br label %793

793:                                              ; preds = %789, %784
  %.1191.us = phi i32 [ %790, %789 ], [ %.0190244.us, %784 ]
  %.1189.us = phi i32 [ 0, %789 ], [ %786, %784 ]
  %.1187.us = phi i32 [ 1, %789 ], [ %787, %784 ]
  %indvars.iv.next346 = add nuw nsw i64 %indvars.iv345, 1
  %exitcond349.not = icmp eq i64 %indvars.iv.next346, %wide.trip.count353
  br i1 %exitcond349.not, label %.preheader217, label %.lr.ph248.split.us.split, !llvm.loop !28

.split:                                           ; preds = %.loopexit221
  %indvars.iv.next284 = add nuw nsw i64 %indvars.iv283, 1
  %exitcond287.not = icmp eq i64 %indvars.iv.next284, %149
  br i1 %exitcond287.not, label %.split242.us, label %.preheader223, !llvm.loop !23

794:                                              ; preds = %.preheader223, %.loopexit221
  %indvars.iv278 = phi i64 [ 0, %.preheader223 ], [ %indvars.iv.next279, %.loopexit221 ]
  %795 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv278
  %796 = load i8, ptr %795, align 1, !tbaa !14
  %797 = zext i8 %796 to i32
  %798 = mul nuw nsw i32 %.0179, %797
  %799 = zext nneg i32 %798 to i64
  %800 = add nuw nsw i64 %indvars.iv283, %799
  %801 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %800
  %802 = load i8, ptr %801, align 1, !tbaa !14
  %803 = zext i8 %802 to i32
  %804 = and i32 %144, %803
  %.not212 = icmp eq i32 %804, 0
  br i1 %.not212, label %.loopexit221, label %.preheader222

.preheader222:                                    ; preds = %794
  %805 = load ptr, ptr %15, align 8, !tbaa !20
  %806 = load i8, ptr %805, align 1, !tbaa !14
  %807 = zext i8 %806 to i64
  %808 = icmp eq i64 %indvars.iv278, %807
  br i1 %808, label %810, label %813

.lr.ph:                                           ; preds = %.preheader220
  %809 = mul nuw nsw i64 %indvars.iv278, %150
  br label %933

810:                                              ; preds = %.preheader222
  %811 = load i8, ptr %718, align 1, !tbaa !14
  %812 = sub i8 %146, %811
  store i8 %812, ptr %718, align 1, !tbaa !14
  br label %813

813:                                              ; preds = %810, %.preheader222
  %814 = getelementptr inbounds i8, ptr %805, i64 1
  %815 = load i8, ptr %814, align 1, !tbaa !14
  %816 = zext i8 %815 to i64
  %817 = icmp eq i64 %indvars.iv278, %816
  br i1 %817, label %818, label %821

818:                                              ; preds = %813
  %819 = load i8, ptr %720, align 1, !tbaa !14
  %820 = sub i8 %146, %819
  store i8 %820, ptr %720, align 1, !tbaa !14
  br label %821

821:                                              ; preds = %818, %813
  %822 = getelementptr inbounds i8, ptr %805, i64 2
  %823 = load i8, ptr %822, align 1, !tbaa !14
  %824 = zext i8 %823 to i64
  %825 = icmp eq i64 %indvars.iv278, %824
  br i1 %825, label %826, label %829

826:                                              ; preds = %821
  %827 = load i8, ptr %722, align 1, !tbaa !14
  %828 = sub i8 %146, %827
  store i8 %828, ptr %722, align 1, !tbaa !14
  br label %829

829:                                              ; preds = %826, %821
  %830 = getelementptr inbounds i8, ptr %805, i64 3
  %831 = load i8, ptr %830, align 1, !tbaa !14
  %832 = zext i8 %831 to i64
  %833 = icmp eq i64 %indvars.iv278, %832
  br i1 %833, label %834, label %837

834:                                              ; preds = %829
  %835 = load i8, ptr %724, align 1, !tbaa !14
  %836 = sub i8 %146, %835
  store i8 %836, ptr %724, align 1, !tbaa !14
  br label %837

837:                                              ; preds = %834, %829
  %838 = getelementptr inbounds i8, ptr %805, i64 4
  %839 = load i8, ptr %838, align 1, !tbaa !14
  %840 = zext i8 %839 to i64
  %841 = icmp eq i64 %indvars.iv278, %840
  br i1 %841, label %842, label %845

842:                                              ; preds = %837
  %843 = load i8, ptr %726, align 1, !tbaa !14
  %844 = sub i8 %146, %843
  store i8 %844, ptr %726, align 1, !tbaa !14
  br label %845

845:                                              ; preds = %842, %837
  %846 = getelementptr inbounds i8, ptr %805, i64 5
  %847 = load i8, ptr %846, align 1, !tbaa !14
  %848 = zext i8 %847 to i64
  %849 = icmp eq i64 %indvars.iv278, %848
  br i1 %849, label %850, label %853

850:                                              ; preds = %845
  %851 = load i8, ptr %728, align 1, !tbaa !14
  %852 = sub i8 %146, %851
  store i8 %852, ptr %728, align 1, !tbaa !14
  br label %853

853:                                              ; preds = %850, %845
  %854 = getelementptr inbounds i8, ptr %805, i64 6
  %855 = load i8, ptr %854, align 1, !tbaa !14
  %856 = zext i8 %855 to i64
  %857 = icmp eq i64 %indvars.iv278, %856
  br i1 %857, label %858, label %861

858:                                              ; preds = %853
  %859 = load i8, ptr %730, align 1, !tbaa !14
  %860 = sub i8 %146, %859
  store i8 %860, ptr %730, align 1, !tbaa !14
  br label %861

861:                                              ; preds = %858, %853
  %862 = getelementptr inbounds i8, ptr %805, i64 7
  %863 = load i8, ptr %862, align 1, !tbaa !14
  %864 = zext i8 %863 to i64
  %865 = icmp eq i64 %indvars.iv278, %864
  br i1 %865, label %866, label %869

866:                                              ; preds = %861
  %867 = load i8, ptr %732, align 1, !tbaa !14
  %868 = sub i8 %146, %867
  store i8 %868, ptr %732, align 1, !tbaa !14
  br label %869

869:                                              ; preds = %866, %861
  %870 = getelementptr inbounds i8, ptr %805, i64 8
  %871 = load i8, ptr %870, align 1, !tbaa !14
  %872 = zext i8 %871 to i64
  %873 = icmp eq i64 %indvars.iv278, %872
  br i1 %873, label %874, label %877

874:                                              ; preds = %869
  %875 = load i8, ptr %734, align 1, !tbaa !14
  %876 = sub i8 %146, %875
  store i8 %876, ptr %734, align 1, !tbaa !14
  br label %877

877:                                              ; preds = %874, %869
  %878 = getelementptr inbounds i8, ptr %805, i64 9
  %879 = load i8, ptr %878, align 1, !tbaa !14
  %880 = zext i8 %879 to i64
  %881 = icmp eq i64 %indvars.iv278, %880
  br i1 %881, label %882, label %885

882:                                              ; preds = %877
  %883 = load i8, ptr %736, align 1, !tbaa !14
  %884 = sub i8 %146, %883
  store i8 %884, ptr %736, align 1, !tbaa !14
  br label %885

885:                                              ; preds = %882, %877
  %886 = getelementptr inbounds i8, ptr %805, i64 10
  %887 = load i8, ptr %886, align 1, !tbaa !14
  %888 = zext i8 %887 to i64
  %889 = icmp eq i64 %indvars.iv278, %888
  br i1 %889, label %890, label %893

890:                                              ; preds = %885
  %891 = load i8, ptr %738, align 1, !tbaa !14
  %892 = sub i8 %146, %891
  store i8 %892, ptr %738, align 1, !tbaa !14
  br label %893

893:                                              ; preds = %890, %885
  %894 = getelementptr inbounds i8, ptr %805, i64 11
  %895 = load i8, ptr %894, align 1, !tbaa !14
  %896 = zext i8 %895 to i64
  %897 = icmp eq i64 %indvars.iv278, %896
  br i1 %897, label %898, label %901

898:                                              ; preds = %893
  %899 = load i8, ptr %740, align 1, !tbaa !14
  %900 = sub i8 %146, %899
  store i8 %900, ptr %740, align 1, !tbaa !14
  br label %901

901:                                              ; preds = %898, %893
  %902 = getelementptr inbounds i8, ptr %805, i64 12
  %903 = load i8, ptr %902, align 1, !tbaa !14
  %904 = zext i8 %903 to i64
  %905 = icmp eq i64 %indvars.iv278, %904
  br i1 %905, label %906, label %909

906:                                              ; preds = %901
  %907 = load i8, ptr %742, align 1, !tbaa !14
  %908 = sub i8 %146, %907
  store i8 %908, ptr %742, align 1, !tbaa !14
  br label %909

909:                                              ; preds = %906, %901
  %910 = getelementptr inbounds i8, ptr %805, i64 13
  %911 = load i8, ptr %910, align 1, !tbaa !14
  %912 = zext i8 %911 to i64
  %913 = icmp eq i64 %indvars.iv278, %912
  br i1 %913, label %914, label %917

914:                                              ; preds = %909
  %915 = load i8, ptr %744, align 1, !tbaa !14
  %916 = sub i8 %146, %915
  store i8 %916, ptr %744, align 1, !tbaa !14
  br label %917

917:                                              ; preds = %914, %909
  %918 = getelementptr inbounds i8, ptr %805, i64 14
  %919 = load i8, ptr %918, align 1, !tbaa !14
  %920 = zext i8 %919 to i64
  %921 = icmp eq i64 %indvars.iv278, %920
  br i1 %921, label %922, label %925

922:                                              ; preds = %917
  %923 = load i8, ptr %746, align 1, !tbaa !14
  %924 = sub i8 %146, %923
  store i8 %924, ptr %746, align 1, !tbaa !14
  br label %925

925:                                              ; preds = %922, %917
  %926 = getelementptr inbounds i8, ptr %805, i64 15
  %927 = load i8, ptr %926, align 1, !tbaa !14
  %928 = zext i8 %927 to i64
  %929 = icmp eq i64 %indvars.iv278, %928
  br i1 %929, label %930, label %.preheader220

930:                                              ; preds = %925
  %931 = load i8, ptr %748, align 1, !tbaa !14
  %932 = sub i8 %146, %931
  store i8 %932, ptr %748, align 1, !tbaa !14
  br label %.preheader220

.preheader220:                                    ; preds = %930, %925
  br i1 %.not265, label %.loopexit221, label %.lr.ph

933:                                              ; preds = %.lr.ph, %933
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %933 ]
  %934 = add nuw nsw i64 %indvars.iv, %809
  %935 = shl nuw i64 %934, 1
  %936 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %935
  %937 = or disjoint i64 %935, 1
  %938 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %937
  call void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %936, ptr noundef nonnull align 1 dereferenceable(1) %938) #9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %150
  br i1 %exitcond.not, label %.loopexit221, label %933, !llvm.loop !29

.loopexit221:                                     ; preds = %933, %.preheader220, %794
  %indvars.iv.next279 = add nuw nsw i64 %indvars.iv278, 1
  %exitcond282.not = icmp eq i64 %indvars.iv.next279, %wide.trip.count281
  br i1 %exitcond282.not, label %.split, label %794, !llvm.loop !18

.preheader217:                                    ; preds = %957, %793
  %.0190.lcssa = phi i32 [ %.1191.us, %793 ], [ %.1191, %957 ]
  %.0188.lcssa = phi i32 [ %.1189.us, %793 ], [ %.1189, %957 ]
  %.0186.lcssa = phi i32 [ %.1187.us, %793 ], [ %.1187, %957 ]
  %.not269 = icmp eq i32 %.0190.lcssa, 0
  br i1 %.not269, label %._crit_edge, label %.lr.ph259

.lr.ph259:                                        ; preds = %.preheader217
  %.not209 = icmp eq i32 %759, 0
  %939 = select i1 %.not209, i32 7, i32 8
  %wide.trip.count358 = zext i32 %.0190.lcssa to i64
  br label %959

.lr.ph248.split:                                  ; preds = %.lr.ph248.split.preheader, %957
  %indvars.iv340 = phi i64 [ 0, %.lr.ph248.split.preheader ], [ %indvars.iv.next341, %957 ]
  %.0186246 = phi i32 [ 1, %.lr.ph248.split.preheader ], [ %.1187, %957 ]
  %.0188245 = phi i32 [ 0, %.lr.ph248.split.preheader ], [ %.1189, %957 ]
  %.0190244 = phi i32 [ 0, %.lr.ph248.split.preheader ], [ %.1191, %957 ]
  %940 = getelementptr inbounds [18 x i8], ptr %14, i64 0, i64 %indvars.iv340
  %941 = load i8, ptr %940, align 1, !tbaa !14
  %942 = zext i8 %941 to i32
  %943 = and i32 %942, %760
  %944 = lshr i32 %942, %757
  %945 = getelementptr inbounds [18 x i32], ptr %16, i64 0, i64 %indvars.iv340
  store i32 %943, ptr %945, align 4, !tbaa !15
  %946 = icmp ult i32 %944, 3
  br i1 %946, label %948, label %947

947:                                              ; preds = %.lr.ph248.split
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.3, i32 noundef 358, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

948:                                              ; preds = %.lr.ph248.split
  %949 = mul i32 %944, %.0186246
  %950 = add i32 %949, %.0188245
  %951 = mul i32 %.0186246, 3
  %952 = icmp eq i32 %.0186246, 81
  br i1 %952, label %953, label %957

953:                                              ; preds = %948
  %954 = add i32 %.0190244, 1
  %955 = zext i32 %.0190244 to i64
  %956 = getelementptr inbounds [8 x i32], ptr %17, i64 0, i64 %955
  store i32 %950, ptr %956, align 4, !tbaa !15
  br label %957

.split252.us:                                     ; preds = %.lr.ph248.split.us.split
  call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.3, i32 noundef 370, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

957:                                              ; preds = %948, %953
  %.1191 = phi i32 [ %954, %953 ], [ %.0190244, %948 ]
  %.1189 = phi i32 [ 0, %953 ], [ %950, %948 ]
  %.1187 = phi i32 [ 1, %953 ], [ %951, %948 ]
  %indvars.iv.next341 = add nuw nsw i64 %indvars.iv340, 1
  %exitcond344.not = icmp eq i64 %indvars.iv.next341, %wide.trip.count343
  br i1 %exitcond344.not, label %.preheader217, label %.lr.ph248.split, !llvm.loop !28

._crit_edge:                                      ; preds = %959, %.preheader217
  %958 = icmp ugt i32 %.0186.lcssa, 1
  br i1 %958, label %963, label %._crit_edge.thread

959:                                              ; preds = %.lr.ph259, %959
  %indvars.iv355 = phi i64 [ 0, %.lr.ph259 ], [ %indvars.iv.next356, %959 ]
  %960 = getelementptr inbounds [8 x i32], ptr %17, i64 0, i64 %indvars.iv355
  %961 = load i32, ptr %960, align 4, !tbaa !15
  %962 = zext i32 %961 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %962, i32 noundef %939, ptr noundef nonnull @.str.31)
  %indvars.iv.next356 = add nuw nsw i64 %indvars.iv355, 1
  %exitcond359.not = icmp eq i64 %indvars.iv.next356, %wide.trip.count358
  br i1 %exitcond359.not, label %._crit_edge, label %959, !llvm.loop !30

963:                                              ; preds = %._crit_edge
  %.not208 = icmp eq i32 %759, 0
  br i1 %.not208, label %968, label %964

964:                                              ; preds = %963
  switch i32 %.0186.lcssa, label %967 [
    i32 3, label %970
    i32 9, label %965
    i32 27, label %966
  ]

965:                                              ; preds = %964
  br label %970

966:                                              ; preds = %964
  br label %970

967:                                              ; preds = %964
  br label %970

968:                                              ; preds = %963
  %969 = icmp eq i32 %.0186.lcssa, 5
  %. = select i1 %969, i32 3, i32 5
  br label %970

970:                                              ; preds = %968, %964, %966, %967, %965
  %.0175 = phi i32 [ 4, %965 ], [ 5, %966 ], [ 7, %967 ], [ 2, %964 ], [ %., %968 ]
  %971 = zext i32 %.0188.lcssa to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %971, i32 noundef %.0175, ptr noundef nonnull @.str.31)
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph248.split.us.split.us, %middle.block, %970, %._crit_edge
  br i1 %.not265, label %.preheader216, label %.lr.ph262.preheader

.lr.ph262.preheader:                              ; preds = %._crit_edge.thread
  %wide.trip.count363 = zext nneg i32 %750 to i64
  br label %.lr.ph262

.preheader216:                                    ; preds = %.lr.ph262, %.split242.us, %._crit_edge.thread
  %wide.trip.count368 = zext nneg i32 %.0176 to i64
  br label %.preheader

.lr.ph262:                                        ; preds = %.lr.ph262.preheader, %.lr.ph262
  %indvars.iv360 = phi i64 [ 0, %.lr.ph262.preheader ], [ %indvars.iv.next361, %.lr.ph262 ]
  %972 = getelementptr inbounds [18 x i32], ptr %16, i64 0, i64 %indvars.iv360
  %973 = load i32, ptr %972, align 4, !tbaa !15
  %974 = zext i32 %973 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %974, i32 noundef %757, ptr noundef nonnull @.str.32)
  %indvars.iv.next361 = add nuw nsw i64 %indvars.iv360, 1
  %exitcond364.not = icmp eq i64 %indvars.iv.next361, %wide.trip.count363
  br i1 %exitcond364.not, label %.preheader216, label %.lr.ph262, !llvm.loop !31

.preheader:                                       ; preds = %.preheader216, %.loopexit
  %indvars.iv370 = phi i64 [ 0, %.preheader216 ], [ %indvars.iv.next371, %.loopexit ]
  %975 = trunc nuw nsw i64 %indvars.iv370 to i32
  %976 = lshr i32 %975, %127
  br label %981

977:                                              ; preds = %.loopexit
  %978 = load i32, ptr %9, align 4, !tbaa !15
  %979 = icmp ult i32 %978, 129
  br i1 %979, label %990, label %989

980:                                              ; preds = %981
  %indvars.iv.next366 = add nuw nsw i64 %indvars.iv365, 1
  %exitcond369.not = icmp eq i64 %indvars.iv.next366, %wide.trip.count368
  br i1 %exitcond369.not, label %.loopexit, label %981, !llvm.loop !32

981:                                              ; preds = %.preheader, %980
  %indvars.iv365 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next366, %980 ]
  %982 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv365
  %983 = load i8, ptr %982, align 1, !tbaa !14
  %984 = zext i8 %983 to i32
  %985 = icmp eq i32 %976, %984
  br i1 %985, label %.loopexit, label %980

.loopexit:                                        ; preds = %980, %981
  %.0171 = phi i32 [ %143, %981 ], [ %139, %980 ]
  %986 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 %indvars.iv370
  %987 = load i8, ptr %986, align 1, !tbaa !14
  %988 = zext i8 %987 to i64
  call void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef nonnull %8, ptr noundef nonnull align 4 dereferenceable(4) %9, i64 noundef %988, i32 noundef %.0171, ptr noundef null)
  %indvars.iv.next371 = add nuw nsw i64 %indvars.iv370, 1
  %exitcond374.not = icmp eq i64 %indvars.iv.next371, %131
  br i1 %exitcond374.not, label %977, label %.preheader, !llvm.loop !33

989:                                              ; preds = %977
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.3, i32 noundef 449, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu10pack_uastcERN6basist11uastc_blockERKNS_20uastc_encode_resultsERKNS_9etc_blockEjRKNS_12eac_a8_blockEbb) #8
  unreachable

990:                                              ; preds = %977
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 16 dereferenceable(16) %8, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 18, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #9
  br label %991

991:                                              ; preds = %990, %56
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  ret void
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN6basisuL16uastc_write_bitsEPhRjmjPKc(ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6basisu9etc_block12get_diff_bitEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

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

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

declare void @_ZN6basisu9etc_block13unpack_color5ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i16 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i16 @_ZNK6basisu9etc_block15get_base5_colorEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

declare void @_ZN6basisu9etc_block13unpack_color4ERjS1_S1_tb(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i16 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_ZNK6basisu9etc_block15get_base4_colorEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #5 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) #7

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6basisu9etc_block12get_flip_bitEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

declare noundef ptr @_ZN6basist18get_anchor_indicesEjjjRPKh(i32 noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt4swapIhENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #5

attributes #0 = { 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 #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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 #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 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind }
attributes #9 = { nounwind }

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

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


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass