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

; 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.basist::astc_quant_bin" = type { i8, i8 }
%"struct.basist::endpoint_err" = type { i16, i8, i8 }

@_ZN6basisu27g_astc_sorted_order_unquantE = external dso_local global [21 x [256 x %"struct.basist::astc_quant_bin"]], align 16
@_ZN6basist14g_bc7_weights3E = external constant [8 x i32], align 16
@_ZN6basisuL30g_bc7_mode_1_optimal_endpointsE = external hidden global [256 x [2 x %"struct.basist::endpoint_err"]], align 16
@_ZN6basisuL34g_astc_4bit_3bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist14g_bc7_weights2E = external constant [4 x i32], align 16
@_ZN6basisuL34g_astc_4bit_2bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basisuL36g_astc_range7_2bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist15g_astc_weights4E = external constant [16 x i32], align 16
@_ZN6basisuL37g_astc_range13_4bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basisuL37g_astc_range13_2bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist15g_astc_weights5E = external constant [32 x i32], align 16
@_ZN6basisuL37g_astc_range11_5bit_optimal_endpointsE = external hidden global [256 x %"struct.basist::endpoint_err"], align 16

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu26bc7enc_compress_block_initEv() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca %"struct.basist::endpoint_err", align 2
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"struct.basist::endpoint_err", align 2
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"struct.basist::endpoint_err", align 2
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"struct.basist::endpoint_err", align 2
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca %"struct.basist::endpoint_err", align 2
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca %"struct.basist::endpoint_err", align 2
  %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 %"struct.basist::endpoint_err", align 2
  %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
  call void @_ZN6basisuL9astc_initEv()
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #4
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %59

59:                                               ; preds = %149, %0
  %60 = load i32, ptr %1, align 4, !tbaa !5
  %61 = icmp slt i32 %60, 256
  br i1 %61, label %63, label %62

62:                                               ; preds = %59
  store i32 2, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #4
  br label %152

63:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %64

64:                                               ; preds = %145, %63
  %65 = load i32, ptr %3, align 4, !tbaa !5
  %66 = icmp ult i32 %65, 2
  br i1 %66, label %68, label %67

67:                                               ; preds = %64
  store i32 5, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  br label %148

68:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  %69 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %4, i32 0, i32 0
  store i16 -1, ptr %69, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %70

70:                                               ; preds = %135, %68
  %71 = load i32, ptr %5, align 4, !tbaa !5
  %72 = icmp ult i32 %71, 64
  br i1 %72, label %74, label %73

73:                                               ; preds = %70
  store i32 8, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  br label %138

74:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  %75 = load i32, ptr %5, align 4, !tbaa !5
  %76 = shl i32 %75, 1
  %77 = load i32, ptr %3, align 4, !tbaa !5
  %78 = or i32 %76, %77
  %79 = shl i32 %78, 1
  store i32 %79, ptr %6, align 4, !tbaa !5
  %80 = load i32, ptr %6, align 4, !tbaa !5
  %81 = lshr i32 %80, 7
  %82 = load i32, ptr %6, align 4, !tbaa !5
  %83 = or i32 %82, %81
  store i32 %83, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %84

84:                                               ; preds = %131, %74
  %85 = load i32, ptr %7, align 4, !tbaa !5
  %86 = icmp ult i32 %85, 64
  br i1 %86, label %88, label %87

87:                                               ; preds = %84
  store i32 11, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %134

88:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %89 = load i32, ptr %7, align 4, !tbaa !5
  %90 = shl i32 %89, 1
  %91 = load i32, ptr %3, align 4, !tbaa !5
  %92 = or i32 %90, %91
  %93 = shl i32 %92, 1
  store i32 %93, ptr %8, align 4, !tbaa !5
  %94 = load i32, ptr %8, align 4, !tbaa !5
  %95 = lshr i32 %94, 7
  %96 = load i32, ptr %8, align 4, !tbaa !5
  %97 = or i32 %96, %95
  store i32 %97, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %98 = load i32, ptr %6, align 4, !tbaa !5
  %99 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @_ZN6basist14g_bc7_weights3E, i64 0, i64 2), align 8, !tbaa !5
  %100 = sub i32 64, %99
  %101 = mul i32 %98, %100
  %102 = load i32, ptr %8, align 4, !tbaa !5
  %103 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @_ZN6basist14g_bc7_weights3E, i64 0, i64 2), align 8, !tbaa !5
  %104 = mul i32 %102, %103
  %105 = add i32 %101, %104
  %106 = add i32 %105, 32
  %107 = lshr i32 %106, 6
  store i32 %107, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %108 = load i32, ptr %9, align 4, !tbaa !5
  %109 = load i32, ptr %1, align 4, !tbaa !5
  %110 = sub nsw i32 %108, %109
  %111 = load i32, ptr %9, align 4, !tbaa !5
  %112 = load i32, ptr %1, align 4, !tbaa !5
  %113 = sub nsw i32 %111, %112
  %114 = mul nsw i32 %110, %113
  store i32 %114, ptr %10, align 4, !tbaa !5
  %115 = load i32, ptr %10, align 4, !tbaa !5
  %116 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %4, i32 0, i32 0
  %117 = load i16, ptr %116, align 2, !tbaa !9
  %118 = zext i16 %117 to i32
  %119 = icmp slt i32 %115, %118
  br i1 %119, label %120, label %130

120:                                              ; preds = %88
  %121 = load i32, ptr %10, align 4, !tbaa !5
  %122 = trunc i32 %121 to i16
  %123 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %4, i32 0, i32 0
  store i16 %122, ptr %123, align 2, !tbaa !9
  %124 = load i32, ptr %5, align 4, !tbaa !5
  %125 = trunc i32 %124 to i8
  %126 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %4, i32 0, i32 1
  store i8 %125, ptr %126, align 2, !tbaa !12
  %127 = load i32, ptr %7, align 4, !tbaa !5
  %128 = trunc i32 %127 to i8
  %129 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %4, i32 0, i32 2
  store i8 %128, ptr %129, align 1, !tbaa !13
  br label %130

130:                                              ; preds = %120, %88
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  br label %131

131:                                              ; preds = %130
  %132 = load i32, ptr %7, align 4, !tbaa !5
  %133 = add i32 %132, 1
  store i32 %133, ptr %7, align 4, !tbaa !5
  br label %84, !llvm.loop !14

134:                                              ; preds = %87
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %135

135:                                              ; preds = %134
  %136 = load i32, ptr %5, align 4, !tbaa !5
  %137 = add i32 %136, 1
  store i32 %137, ptr %5, align 4, !tbaa !5
  br label %70, !llvm.loop !16

138:                                              ; preds = %73
  %139 = load i32, ptr %1, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [256 x [2 x %"struct.basist::endpoint_err"]], ptr @_ZN6basisuL30g_bc7_mode_1_optimal_endpointsE, i64 0, i64 %140
  %142 = load i32, ptr %3, align 4, !tbaa !5
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds [2 x %"struct.basist::endpoint_err"], ptr %141, i64 0, i64 %143
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %144, ptr align 2 %4, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %145

145:                                              ; preds = %138
  %146 = load i32, ptr %3, align 4, !tbaa !5
  %147 = add i32 %146, 1
  store i32 %147, ptr %3, align 4, !tbaa !5
  br label %64, !llvm.loop !20

148:                                              ; preds = %67
  br label %149

149:                                              ; preds = %148
  %150 = load i32, ptr %1, align 4, !tbaa !5
  %151 = add nsw i32 %150, 1
  store i32 %151, ptr %1, align 4, !tbaa !5
  br label %59, !llvm.loop !21

152:                                              ; preds = %62
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %153

153:                                              ; preds = %215, %152
  %154 = load i32, ptr %11, align 4, !tbaa !5
  %155 = icmp slt i32 %154, 256
  br i1 %155, label %157, label %156

156:                                              ; preds = %153
  store i32 14, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %218

157:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %158 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %12, i32 0, i32 0
  store i16 -1, ptr %158, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %159

159:                                              ; preds = %208, %157
  %160 = load i32, ptr %13, align 4, !tbaa !5
  %161 = icmp ult i32 %160, 16
  br i1 %161, label %163, label %162

162:                                              ; preds = %159
  store i32 17, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %211

163:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %164 = load i32, ptr %13, align 4, !tbaa !5
  %165 = shl i32 %164, 4
  %166 = load i32, ptr %13, align 4, !tbaa !5
  %167 = or i32 %165, %166
  store i32 %167, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %168

168:                                              ; preds = %204, %163
  %169 = load i32, ptr %15, align 4, !tbaa !5
  %170 = icmp ult i32 %169, 16
  br i1 %170, label %172, label %171

171:                                              ; preds = %168
  store i32 20, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %207

172:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %173 = load i32, ptr %15, align 4, !tbaa !5
  %174 = shl i32 %173, 4
  %175 = load i32, ptr %15, align 4, !tbaa !5
  %176 = or i32 %174, %175
  store i32 %176, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %177 = load i32, ptr %14, align 4, !tbaa !5
  %178 = load i32, ptr %16, align 4, !tbaa !5
  %179 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @_ZN6basist14g_bc7_weights3E, i64 0, i64 2), align 8, !tbaa !5
  %180 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %177, i32 noundef %178, i32 noundef %179)
  store i32 %180, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %181 = load i32, ptr %17, align 4, !tbaa !5
  %182 = load i32, ptr %11, align 4, !tbaa !5
  %183 = sub nsw i32 %181, %182
  %184 = load i32, ptr %17, align 4, !tbaa !5
  %185 = load i32, ptr %11, align 4, !tbaa !5
  %186 = sub nsw i32 %184, %185
  %187 = mul nsw i32 %183, %186
  store i32 %187, ptr %18, align 4, !tbaa !5
  %188 = load i32, ptr %18, align 4, !tbaa !5
  %189 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %12, i32 0, i32 0
  %190 = load i16, ptr %189, align 2, !tbaa !9
  %191 = zext i16 %190 to i32
  %192 = icmp slt i32 %188, %191
  br i1 %192, label %193, label %203

193:                                              ; preds = %172
  %194 = load i32, ptr %18, align 4, !tbaa !5
  %195 = trunc i32 %194 to i16
  %196 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %12, i32 0, i32 0
  store i16 %195, ptr %196, align 2, !tbaa !9
  %197 = load i32, ptr %13, align 4, !tbaa !5
  %198 = trunc i32 %197 to i8
  %199 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %12, i32 0, i32 1
  store i8 %198, ptr %199, align 2, !tbaa !12
  %200 = load i32, ptr %15, align 4, !tbaa !5
  %201 = trunc i32 %200 to i8
  %202 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %12, i32 0, i32 2
  store i8 %201, ptr %202, align 1, !tbaa !13
  br label %203

203:                                              ; preds = %193, %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %204

204:                                              ; preds = %203
  %205 = load i32, ptr %15, align 4, !tbaa !5
  %206 = add i32 %205, 1
  store i32 %206, ptr %15, align 4, !tbaa !5
  br label %168, !llvm.loop !22

207:                                              ; preds = %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %13, align 4, !tbaa !5
  %210 = add i32 %209, 1
  store i32 %210, ptr %13, align 4, !tbaa !5
  br label %159, !llvm.loop !23

211:                                              ; preds = %162
  %212 = load i32, ptr %11, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL34g_astc_4bit_3bit_optimal_endpointsE, i64 0, i64 %213
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %214, ptr align 2 %12, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %215

215:                                              ; preds = %211
  %216 = load i32, ptr %11, align 4, !tbaa !5
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %11, align 4, !tbaa !5
  br label %153, !llvm.loop !24

218:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %281, %218
  %220 = load i32, ptr %19, align 4, !tbaa !5
  %221 = icmp slt i32 %220, 256
  br i1 %221, label %223, label %222

222:                                              ; preds = %219
  store i32 23, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %284

223:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %224 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %20, i32 0, i32 0
  store i16 -1, ptr %224, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %225

225:                                              ; preds = %274, %223
  %226 = load i32, ptr %21, align 4, !tbaa !5
  %227 = icmp ult i32 %226, 16
  br i1 %227, label %229, label %228

228:                                              ; preds = %225
  store i32 26, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %277

229:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %230 = load i32, ptr %21, align 4, !tbaa !5
  %231 = shl i32 %230, 4
  %232 = load i32, ptr %21, align 4, !tbaa !5
  %233 = or i32 %231, %232
  store i32 %233, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %234

234:                                              ; preds = %270, %229
  %235 = load i32, ptr %23, align 4, !tbaa !5
  %236 = icmp ult i32 %235, 16
  br i1 %236, label %238, label %237

237:                                              ; preds = %234
  store i32 29, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %273

238:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %239 = load i32, ptr %23, align 4, !tbaa !5
  %240 = shl i32 %239, 4
  %241 = load i32, ptr %23, align 4, !tbaa !5
  %242 = or i32 %240, %241
  store i32 %242, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %243 = load i32, ptr %22, align 4, !tbaa !5
  %244 = load i32, ptr %24, align 4, !tbaa !5
  %245 = load i32, ptr getelementptr inbounds ([4 x i32], ptr @_ZN6basist14g_bc7_weights2E, i64 0, i64 1), align 4, !tbaa !5
  %246 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %243, i32 noundef %244, i32 noundef %245)
  store i32 %246, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %247 = load i32, ptr %25, align 4, !tbaa !5
  %248 = load i32, ptr %19, align 4, !tbaa !5
  %249 = sub nsw i32 %247, %248
  %250 = load i32, ptr %25, align 4, !tbaa !5
  %251 = load i32, ptr %19, align 4, !tbaa !5
  %252 = sub nsw i32 %250, %251
  %253 = mul nsw i32 %249, %252
  store i32 %253, ptr %26, align 4, !tbaa !5
  %254 = load i32, ptr %26, align 4, !tbaa !5
  %255 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %20, i32 0, i32 0
  %256 = load i16, ptr %255, align 2, !tbaa !9
  %257 = zext i16 %256 to i32
  %258 = icmp slt i32 %254, %257
  br i1 %258, label %259, label %269

259:                                              ; preds = %238
  %260 = load i32, ptr %26, align 4, !tbaa !5
  %261 = trunc i32 %260 to i16
  %262 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %20, i32 0, i32 0
  store i16 %261, ptr %262, align 2, !tbaa !9
  %263 = load i32, ptr %21, align 4, !tbaa !5
  %264 = trunc i32 %263 to i8
  %265 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %20, i32 0, i32 1
  store i8 %264, ptr %265, align 2, !tbaa !12
  %266 = load i32, ptr %23, align 4, !tbaa !5
  %267 = trunc i32 %266 to i8
  %268 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %20, i32 0, i32 2
  store i8 %267, ptr %268, align 1, !tbaa !13
  br label %269

269:                                              ; preds = %259, %238
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  br label %270

270:                                              ; preds = %269
  %271 = load i32, ptr %23, align 4, !tbaa !5
  %272 = add i32 %271, 1
  store i32 %272, ptr %23, align 4, !tbaa !5
  br label %234, !llvm.loop !25

273:                                              ; preds = %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %274

274:                                              ; preds = %273
  %275 = load i32, ptr %21, align 4, !tbaa !5
  %276 = add i32 %275, 1
  store i32 %276, ptr %21, align 4, !tbaa !5
  br label %225, !llvm.loop !26

277:                                              ; preds = %228
  %278 = load i32, ptr %19, align 4, !tbaa !5
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL34g_astc_4bit_2bit_optimal_endpointsE, i64 0, i64 %279
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %280, ptr align 2 %20, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %281

281:                                              ; preds = %277
  %282 = load i32, ptr %19, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %19, align 4, !tbaa !5
  br label %219, !llvm.loop !27

284:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  store i32 0, ptr %27, align 4, !tbaa !5
  br label %285

285:                                              ; preds = %351, %284
  %286 = load i32, ptr %27, align 4, !tbaa !5
  %287 = icmp slt i32 %286, 256
  br i1 %287, label %289, label %288

288:                                              ; preds = %285
  store i32 32, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %354

289:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %290 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %28, i32 0, i32 0
  store i16 -1, ptr %290, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %291

291:                                              ; preds = %344, %289
  %292 = load i32, ptr %29, align 4, !tbaa !5
  %293 = icmp ult i32 %292, 12
  br i1 %293, label %295, label %294

294:                                              ; preds = %291
  store i32 35, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %347

295:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %296 = load i32, ptr %29, align 4, !tbaa !5
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 7), i64 0, i64 %297
  %299 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %298, i32 0, i32 0
  %300 = load i8, ptr %299, align 2, !tbaa !28
  %301 = zext i8 %300 to i32
  store i32 %301, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %302

302:                                              ; preds = %340, %295
  %303 = load i32, ptr %31, align 4, !tbaa !5
  %304 = icmp ult i32 %303, 12
  br i1 %304, label %306, label %305

305:                                              ; preds = %302
  store i32 38, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %343

306:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %307 = load i32, ptr %31, align 4, !tbaa !5
  %308 = zext i32 %307 to i64
  %309 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 7), i64 0, i64 %308
  %310 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %309, i32 0, i32 0
  %311 = load i8, ptr %310, align 2, !tbaa !28
  %312 = zext i8 %311 to i32
  store i32 %312, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %313 = load i32, ptr %30, align 4, !tbaa !5
  %314 = load i32, ptr %32, align 4, !tbaa !5
  %315 = load i32, ptr getelementptr inbounds ([4 x i32], ptr @_ZN6basist14g_bc7_weights2E, i64 0, i64 1), align 4, !tbaa !5
  %316 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %313, i32 noundef %314, i32 noundef %315)
  store i32 %316, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %317 = load i32, ptr %33, align 4, !tbaa !5
  %318 = load i32, ptr %27, align 4, !tbaa !5
  %319 = sub nsw i32 %317, %318
  %320 = load i32, ptr %33, align 4, !tbaa !5
  %321 = load i32, ptr %27, align 4, !tbaa !5
  %322 = sub nsw i32 %320, %321
  %323 = mul nsw i32 %319, %322
  store i32 %323, ptr %34, align 4, !tbaa !5
  %324 = load i32, ptr %34, align 4, !tbaa !5
  %325 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %28, i32 0, i32 0
  %326 = load i16, ptr %325, align 2, !tbaa !9
  %327 = zext i16 %326 to i32
  %328 = icmp slt i32 %324, %327
  br i1 %328, label %329, label %339

329:                                              ; preds = %306
  %330 = load i32, ptr %34, align 4, !tbaa !5
  %331 = trunc i32 %330 to i16
  %332 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %28, i32 0, i32 0
  store i16 %331, ptr %332, align 2, !tbaa !9
  %333 = load i32, ptr %29, align 4, !tbaa !5
  %334 = trunc i32 %333 to i8
  %335 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %28, i32 0, i32 1
  store i8 %334, ptr %335, align 2, !tbaa !12
  %336 = load i32, ptr %31, align 4, !tbaa !5
  %337 = trunc i32 %336 to i8
  %338 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %28, i32 0, i32 2
  store i8 %337, ptr %338, align 1, !tbaa !13
  br label %339

339:                                              ; preds = %329, %306
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %340

340:                                              ; preds = %339
  %341 = load i32, ptr %31, align 4, !tbaa !5
  %342 = add i32 %341, 1
  store i32 %342, ptr %31, align 4, !tbaa !5
  br label %302, !llvm.loop !30

343:                                              ; preds = %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %344

344:                                              ; preds = %343
  %345 = load i32, ptr %29, align 4, !tbaa !5
  %346 = add i32 %345, 1
  store i32 %346, ptr %29, align 4, !tbaa !5
  br label %291, !llvm.loop !31

347:                                              ; preds = %294
  %348 = load i32, ptr %27, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL36g_astc_range7_2bit_optimal_endpointsE, i64 0, i64 %349
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %350, ptr align 2 %28, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %351

351:                                              ; preds = %347
  %352 = load i32, ptr %27, align 4, !tbaa !5
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %27, align 4, !tbaa !5
  br label %285, !llvm.loop !32

354:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %355

355:                                              ; preds = %421, %354
  %356 = load i32, ptr %35, align 4, !tbaa !5
  %357 = icmp slt i32 %356, 256
  br i1 %357, label %359, label %358

358:                                              ; preds = %355
  store i32 41, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %424

359:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %360 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %36, i32 0, i32 0
  store i16 -1, ptr %360, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %361

361:                                              ; preds = %414, %359
  %362 = load i32, ptr %37, align 4, !tbaa !5
  %363 = icmp ult i32 %362, 48
  br i1 %363, label %365, label %364

364:                                              ; preds = %361
  store i32 44, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  br label %417

365:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %366 = load i32, ptr %37, align 4, !tbaa !5
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 13), i64 0, i64 %367
  %369 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %368, i32 0, i32 0
  %370 = load i8, ptr %369, align 2, !tbaa !28
  %371 = zext i8 %370 to i32
  store i32 %371, ptr %38, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  store i32 0, ptr %39, align 4, !tbaa !5
  br label %372

372:                                              ; preds = %410, %365
  %373 = load i32, ptr %39, align 4, !tbaa !5
  %374 = icmp ult i32 %373, 48
  br i1 %374, label %376, label %375

375:                                              ; preds = %372
  store i32 47, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  br label %413

376:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  %377 = load i32, ptr %39, align 4, !tbaa !5
  %378 = zext i32 %377 to i64
  %379 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 13), i64 0, i64 %378
  %380 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %379, i32 0, i32 0
  %381 = load i8, ptr %380, align 2, !tbaa !28
  %382 = zext i8 %381 to i32
  store i32 %382, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %383 = load i32, ptr %38, align 4, !tbaa !5
  %384 = load i32, ptr %40, align 4, !tbaa !5
  %385 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @_ZN6basist15g_astc_weights4E, i64 0, i64 2), align 8, !tbaa !5
  %386 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %383, i32 noundef %384, i32 noundef %385)
  store i32 %386, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %387 = load i32, ptr %41, align 4, !tbaa !5
  %388 = load i32, ptr %35, align 4, !tbaa !5
  %389 = sub nsw i32 %387, %388
  %390 = load i32, ptr %41, align 4, !tbaa !5
  %391 = load i32, ptr %35, align 4, !tbaa !5
  %392 = sub nsw i32 %390, %391
  %393 = mul nsw i32 %389, %392
  store i32 %393, ptr %42, align 4, !tbaa !5
  %394 = load i32, ptr %42, align 4, !tbaa !5
  %395 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %36, i32 0, i32 0
  %396 = load i16, ptr %395, align 2, !tbaa !9
  %397 = zext i16 %396 to i32
  %398 = icmp slt i32 %394, %397
  br i1 %398, label %399, label %409

399:                                              ; preds = %376
  %400 = load i32, ptr %42, align 4, !tbaa !5
  %401 = trunc i32 %400 to i16
  %402 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %36, i32 0, i32 0
  store i16 %401, ptr %402, align 2, !tbaa !9
  %403 = load i32, ptr %37, align 4, !tbaa !5
  %404 = trunc i32 %403 to i8
  %405 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %36, i32 0, i32 1
  store i8 %404, ptr %405, align 2, !tbaa !12
  %406 = load i32, ptr %39, align 4, !tbaa !5
  %407 = trunc i32 %406 to i8
  %408 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %36, i32 0, i32 2
  store i8 %407, ptr %408, align 1, !tbaa !13
  br label %409

409:                                              ; preds = %399, %376
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  br label %410

410:                                              ; preds = %409
  %411 = load i32, ptr %39, align 4, !tbaa !5
  %412 = add i32 %411, 1
  store i32 %412, ptr %39, align 4, !tbaa !5
  br label %372, !llvm.loop !33

413:                                              ; preds = %375
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %414

414:                                              ; preds = %413
  %415 = load i32, ptr %37, align 4, !tbaa !5
  %416 = add i32 %415, 1
  store i32 %416, ptr %37, align 4, !tbaa !5
  br label %361, !llvm.loop !34

417:                                              ; preds = %364
  %418 = load i32, ptr %35, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range13_4bit_optimal_endpointsE, i64 0, i64 %419
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %420, ptr align 2 %36, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %421

421:                                              ; preds = %417
  %422 = load i32, ptr %35, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %35, align 4, !tbaa !5
  br label %355, !llvm.loop !35

424:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %425

425:                                              ; preds = %491, %424
  %426 = load i32, ptr %43, align 4, !tbaa !5
  %427 = icmp slt i32 %426, 256
  br i1 %427, label %429, label %428

428:                                              ; preds = %425
  store i32 50, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  br label %494

429:                                              ; preds = %425
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %430 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %44, i32 0, i32 0
  store i16 -1, ptr %430, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %431

431:                                              ; preds = %484, %429
  %432 = load i32, ptr %45, align 4, !tbaa !5
  %433 = icmp ult i32 %432, 48
  br i1 %433, label %435, label %434

434:                                              ; preds = %431
  store i32 53, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  br label %487

435:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %436 = load i32, ptr %45, align 4, !tbaa !5
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 13), i64 0, i64 %437
  %439 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %438, i32 0, i32 0
  %440 = load i8, ptr %439, align 2, !tbaa !28
  %441 = zext i8 %440 to i32
  store i32 %441, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  store i32 0, ptr %47, align 4, !tbaa !5
  br label %442

442:                                              ; preds = %480, %435
  %443 = load i32, ptr %47, align 4, !tbaa !5
  %444 = icmp ult i32 %443, 48
  br i1 %444, label %446, label %445

445:                                              ; preds = %442
  store i32 56, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  br label %483

446:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  %447 = load i32, ptr %47, align 4, !tbaa !5
  %448 = zext i32 %447 to i64
  %449 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 13), i64 0, i64 %448
  %450 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %449, i32 0, i32 0
  %451 = load i8, ptr %450, align 2, !tbaa !28
  %452 = zext i8 %451 to i32
  store i32 %452, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  %453 = load i32, ptr %46, align 4, !tbaa !5
  %454 = load i32, ptr %48, align 4, !tbaa !5
  %455 = load i32, ptr getelementptr inbounds ([4 x i32], ptr @_ZN6basist14g_bc7_weights2E, i64 0, i64 1), align 4, !tbaa !5
  %456 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %453, i32 noundef %454, i32 noundef %455)
  store i32 %456, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %457 = load i32, ptr %49, align 4, !tbaa !5
  %458 = load i32, ptr %43, align 4, !tbaa !5
  %459 = sub nsw i32 %457, %458
  %460 = load i32, ptr %49, align 4, !tbaa !5
  %461 = load i32, ptr %43, align 4, !tbaa !5
  %462 = sub nsw i32 %460, %461
  %463 = mul nsw i32 %459, %462
  store i32 %463, ptr %50, align 4, !tbaa !5
  %464 = load i32, ptr %50, align 4, !tbaa !5
  %465 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %44, i32 0, i32 0
  %466 = load i16, ptr %465, align 2, !tbaa !9
  %467 = zext i16 %466 to i32
  %468 = icmp slt i32 %464, %467
  br i1 %468, label %469, label %479

469:                                              ; preds = %446
  %470 = load i32, ptr %50, align 4, !tbaa !5
  %471 = trunc i32 %470 to i16
  %472 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %44, i32 0, i32 0
  store i16 %471, ptr %472, align 2, !tbaa !9
  %473 = load i32, ptr %45, align 4, !tbaa !5
  %474 = trunc i32 %473 to i8
  %475 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %44, i32 0, i32 1
  store i8 %474, ptr %475, align 2, !tbaa !12
  %476 = load i32, ptr %47, align 4, !tbaa !5
  %477 = trunc i32 %476 to i8
  %478 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %44, i32 0, i32 2
  store i8 %477, ptr %478, align 1, !tbaa !13
  br label %479

479:                                              ; preds = %469, %446
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  br label %480

480:                                              ; preds = %479
  %481 = load i32, ptr %47, align 4, !tbaa !5
  %482 = add i32 %481, 1
  store i32 %482, ptr %47, align 4, !tbaa !5
  br label %442, !llvm.loop !36

483:                                              ; preds = %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %45, align 4, !tbaa !5
  %486 = add i32 %485, 1
  store i32 %486, ptr %45, align 4, !tbaa !5
  br label %431, !llvm.loop !37

487:                                              ; preds = %434
  %488 = load i32, ptr %43, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range13_2bit_optimal_endpointsE, i64 0, i64 %489
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %490, ptr align 2 %44, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  br label %491

491:                                              ; preds = %487
  %492 = load i32, ptr %43, align 4, !tbaa !5
  %493 = add nsw i32 %492, 1
  store i32 %493, ptr %43, align 4, !tbaa !5
  br label %425, !llvm.loop !38

494:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %495

495:                                              ; preds = %561, %494
  %496 = load i32, ptr %51, align 4, !tbaa !5
  %497 = icmp slt i32 %496, 256
  br i1 %497, label %499, label %498

498:                                              ; preds = %495
  store i32 59, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  br label %564

499:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %500 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %52, i32 0, i32 0
  store i16 -1, ptr %500, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  store i32 0, ptr %53, align 4, !tbaa !5
  br label %501

501:                                              ; preds = %554, %499
  %502 = load i32, ptr %53, align 4, !tbaa !5
  %503 = icmp ult i32 %502, 32
  br i1 %503, label %505, label %504

504:                                              ; preds = %501
  store i32 62, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  br label %557

505:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %506 = load i32, ptr %53, align 4, !tbaa !5
  %507 = zext i32 %506 to i64
  %508 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 11), i64 0, i64 %507
  %509 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %508, i32 0, i32 0
  %510 = load i8, ptr %509, align 2, !tbaa !28
  %511 = zext i8 %510 to i32
  store i32 %511, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %512

512:                                              ; preds = %550, %505
  %513 = load i32, ptr %55, align 4, !tbaa !5
  %514 = icmp ult i32 %513, 32
  br i1 %514, label %516, label %515

515:                                              ; preds = %512
  store i32 65, ptr %2, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %553

516:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  %517 = load i32, ptr %55, align 4, !tbaa !5
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds ([21 x [256 x %"struct.basist::astc_quant_bin"]], ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 0, i64 11), i64 0, i64 %518
  %520 = getelementptr inbounds %"struct.basist::astc_quant_bin", ptr %519, i32 0, i32 0
  %521 = load i8, ptr %520, align 2, !tbaa !28
  %522 = zext i8 %521 to i32
  store i32 %522, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  %523 = load i32, ptr %54, align 4, !tbaa !5
  %524 = load i32, ptr %56, align 4, !tbaa !5
  %525 = load i32, ptr getelementptr inbounds ([32 x i32], ptr @_ZN6basist15g_astc_weights5E, i64 0, i64 13), align 4, !tbaa !5
  %526 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %523, i32 noundef %524, i32 noundef %525)
  store i32 %526, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %527 = load i32, ptr %57, align 4, !tbaa !5
  %528 = load i32, ptr %51, align 4, !tbaa !5
  %529 = sub nsw i32 %527, %528
  %530 = load i32, ptr %57, align 4, !tbaa !5
  %531 = load i32, ptr %51, align 4, !tbaa !5
  %532 = sub nsw i32 %530, %531
  %533 = mul nsw i32 %529, %532
  store i32 %533, ptr %58, align 4, !tbaa !5
  %534 = load i32, ptr %58, align 4, !tbaa !5
  %535 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %52, i32 0, i32 0
  %536 = load i16, ptr %535, align 2, !tbaa !9
  %537 = zext i16 %536 to i32
  %538 = icmp slt i32 %534, %537
  br i1 %538, label %539, label %549

539:                                              ; preds = %516
  %540 = load i32, ptr %58, align 4, !tbaa !5
  %541 = trunc i32 %540 to i16
  %542 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %52, i32 0, i32 0
  store i16 %541, ptr %542, align 2, !tbaa !9
  %543 = load i32, ptr %53, align 4, !tbaa !5
  %544 = trunc i32 %543 to i8
  %545 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %52, i32 0, i32 1
  store i8 %544, ptr %545, align 2, !tbaa !12
  %546 = load i32, ptr %55, align 4, !tbaa !5
  %547 = trunc i32 %546 to i8
  %548 = getelementptr inbounds %"struct.basist::endpoint_err", ptr %52, i32 0, i32 2
  store i8 %547, ptr %548, align 1, !tbaa !13
  br label %549

549:                                              ; preds = %539, %516
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %550

550:                                              ; preds = %549
  %551 = load i32, ptr %55, align 4, !tbaa !5
  %552 = add i32 %551, 1
  store i32 %552, ptr %55, align 4, !tbaa !5
  br label %512, !llvm.loop !39

553:                                              ; preds = %515
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  br label %554

554:                                              ; preds = %553
  %555 = load i32, ptr %53, align 4, !tbaa !5
  %556 = add i32 %555, 1
  store i32 %556, ptr %53, align 4, !tbaa !5
  br label %501, !llvm.loop !40

557:                                              ; preds = %504
  %558 = load i32, ptr %51, align 4, !tbaa !5
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range11_5bit_optimal_endpointsE, i64 0, i64 %559
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %560, ptr align 2 %52, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  br label %561

561:                                              ; preds = %557
  %562 = load i32, ptr %51, align 4, !tbaa !5
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr %51, align 4, !tbaa !5
  br label %495, !llvm.loop !41

564:                                              ; preds = %498
  ret void
}

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN6basisuL9astc_initEv() #0

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef, i32 noundef, i32 noundef) #3

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSN6basist12endpoint_errE", !11, i64 0, !7, i64 2, !7, i64 3}
!11 = !{!"short", !7, i64 0}
!12 = !{!10, !7, i64 2}
!13 = !{!10, !7, i64 3}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{i64 0, i64 2, !18, i64 2, i64 1, !19, i64 3, i64 1, !19}
!18 = !{!11, !11, i64 0}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = !{!29, !7, i64 0}
!29 = !{!"_ZTSN6basist14astc_quant_binE", !7, i64 0, !7, i64 1}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}
!35 = distinct !{!35, !15}
!36 = distinct !{!36, !15}
!37 = distinct !{!37, !15}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = distinct !{!40, !15}
!41 = distinct !{!41, !15}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.basist::astc_quant_bin" = type { i8, i8 }
%"struct.basist::endpoint_err" = type { i16, i8, i8 }

@_ZN6basisu27g_astc_sorted_order_unquantE = external dso_local local_unnamed_addr global [21 x [256 x %"struct.basist::astc_quant_bin"]], align 16
@_ZN6basist14g_bc7_weights3E = external local_unnamed_addr constant [8 x i32], align 16
@_ZN6basisuL30g_bc7_mode_1_optimal_endpointsE = external hidden local_unnamed_addr global [256 x [2 x %"struct.basist::endpoint_err"]], align 16
@_ZN6basisuL34g_astc_4bit_3bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist14g_bc7_weights2E = external local_unnamed_addr constant [4 x i32], align 16
@_ZN6basisuL34g_astc_4bit_2bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basisuL36g_astc_range7_2bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist15g_astc_weights4E = external local_unnamed_addr constant [16 x i32], align 16
@_ZN6basisuL37g_astc_range13_4bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basisuL37g_astc_range13_2bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16
@_ZN6basist15g_astc_weights5E = external local_unnamed_addr constant [32 x i32], align 16
@_ZN6basisuL37g_astc_range11_5bit_optimal_endpointsE = external hidden local_unnamed_addr global [256 x %"struct.basist::endpoint_err"], align 16

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu26bc7enc_compress_block_initEv() local_unnamed_addr #0 {
  tail call void @_ZN6basisuL9astc_initEv()
  %1 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist14g_bc7_weights3E, i64 8), align 8, !tbaa !5
  %2 = sub i32 64, %1
  br label %.preheader204

.preheader204:                                    ; preds = %0, %30
  %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %30 ]
  %.sroa.7153.0217 = phi i8 [ undef, %0 ], [ %.sroa.7153.4.1, %30 ]
  %.sroa.6152.0216 = phi i8 [ undef, %0 ], [ %.sroa.6152.4.1, %30 ]
  %3 = trunc nuw nsw i64 %indvars.iv to i32
  br label %32

.preheader203.1:                                  ; preds = %38
  %4 = getelementptr inbounds [256 x [2 x %"struct.basist::endpoint_err"]], ptr @_ZN6basisuL30g_bc7_mode_1_optimal_endpointsE, i64 0, i64 %indvars.iv, i64 0
  store i16 %.sroa.0151.2, ptr %4, align 8, !tbaa !9
  %.sroa.6152.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 2
  store i8 %.sroa.6152.4, ptr %.sroa.6152.0..sroa_idx, align 2, !tbaa !11
  %.sroa.7153.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 3
  store i8 %.sroa.7153.4, ptr %.sroa.7153.0..sroa_idx, align 1, !tbaa !11
  br label %5

5:                                                ; preds = %28, %.preheader203.1
  %.sroa.7153.2212.1 = phi i8 [ %.sroa.7153.4, %.preheader203.1 ], [ %.sroa.7153.4.1, %28 ]
  %.sroa.6152.2211.1 = phi i8 [ %.sroa.6152.4, %.preheader203.1 ], [ %.sroa.6152.4.1, %28 ]
  %.sroa.0151.0210.1 = phi i16 [ -1, %.preheader203.1 ], [ %.sroa.0151.2.1, %28 ]
  %.0168209.1 = phi i32 [ 0, %.preheader203.1 ], [ %29, %28 ]
  %6 = shl nuw nsw i32 %.0168209.1, 2
  %7 = lshr i32 %.0168209.1, 5
  %8 = add nuw nsw i32 %6, %7
  %9 = add nuw nsw i32 %8, 2
  %10 = mul i32 %2, %9
  %11 = trunc nuw nsw i32 %.0168209.1 to i8
  br label %12

12:                                               ; preds = %12, %5
  %.sroa.7153.3208.1 = phi i8 [ %.sroa.7153.2212.1, %5 ], [ %.sroa.7153.4.1, %12 ]
  %.sroa.6152.3207.1 = phi i8 [ %.sroa.6152.2211.1, %5 ], [ %.sroa.6152.4.1, %12 ]
  %.sroa.0151.1206.1 = phi i16 [ %.sroa.0151.0210.1, %5 ], [ %.sroa.0151.2.1, %12 ]
  %.0172205.1 = phi i32 [ 0, %5 ], [ %27, %12 ]
  %13 = shl nuw nsw i32 %.0172205.1, 2
  %14 = lshr i32 %.0172205.1, 5
  %15 = add nuw nsw i32 %13, %14
  %16 = add nuw nsw i32 %15, 2
  %17 = mul i32 %1, %16
  %18 = add i32 %17, 32
  %19 = add i32 %18, %10
  %20 = lshr i32 %19, 6
  %21 = sub nsw i32 %20, %3
  %22 = mul nsw i32 %21, %21
  %23 = zext i16 %.sroa.0151.1206.1 to i32
  %24 = icmp ult i32 %22, %23
  %25 = trunc i32 %22 to i16
  %26 = trunc nuw nsw i32 %.0172205.1 to i8
  %.sroa.0151.2.1 = select i1 %24, i16 %25, i16 %.sroa.0151.1206.1
  %.sroa.6152.4.1 = select i1 %24, i8 %11, i8 %.sroa.6152.3207.1
  %.sroa.7153.4.1 = select i1 %24, i8 %26, i8 %.sroa.7153.3208.1
  %27 = add nuw nsw i32 %.0172205.1, 1
  %exitcond.1.not = icmp eq i32 %27, 64
  br i1 %exitcond.1.not, label %28, label %12, !llvm.loop !12

28:                                               ; preds = %12
  %29 = add nuw nsw i32 %.0168209.1, 1
  %exitcond285.1.not = icmp eq i32 %29, 64
  br i1 %exitcond285.1.not, label %30, label %5, !llvm.loop !14

30:                                               ; preds = %28
  %31 = getelementptr inbounds [256 x [2 x %"struct.basist::endpoint_err"]], ptr @_ZN6basisuL30g_bc7_mode_1_optimal_endpointsE, i64 0, i64 %indvars.iv, i64 1
  store i16 %.sroa.0151.2.1, ptr %31, align 4, !tbaa !9
  %.sroa.6152.0..sroa_idx.1 = getelementptr inbounds i8, ptr %31, i64 2
  store i8 %.sroa.6152.4.1, ptr %.sroa.6152.0..sroa_idx.1, align 2, !tbaa !11
  %.sroa.7153.0..sroa_idx.1 = getelementptr inbounds i8, ptr %31, i64 3
  store i8 %.sroa.7153.4.1, ptr %.sroa.7153.0..sroa_idx.1, align 1, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond286.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond286.not, label %.preheader201, label %.preheader204, !llvm.loop !15

32:                                               ; preds = %.preheader204, %38
  %.sroa.7153.2212 = phi i8 [ %.sroa.7153.0217, %.preheader204 ], [ %.sroa.7153.4, %38 ]
  %.sroa.6152.2211 = phi i8 [ %.sroa.6152.0216, %.preheader204 ], [ %.sroa.6152.4, %38 ]
  %.sroa.0151.0210 = phi i16 [ -1, %.preheader204 ], [ %.sroa.0151.2, %38 ]
  %.0168209 = phi i32 [ 0, %.preheader204 ], [ %39, %38 ]
  %33 = shl nuw nsw i32 %.0168209, 2
  %34 = lshr i32 %.0168209, 5
  %35 = add nuw nsw i32 %33, %34
  %36 = mul i32 %2, %35
  %37 = trunc nuw nsw i32 %.0168209 to i8
  br label %40

38:                                               ; preds = %40
  %39 = add nuw nsw i32 %.0168209, 1
  %exitcond285.not = icmp eq i32 %39, 64
  br i1 %exitcond285.not, label %.preheader203.1, label %32, !llvm.loop !14

40:                                               ; preds = %32, %40
  %.sroa.7153.3208 = phi i8 [ %.sroa.7153.2212, %32 ], [ %.sroa.7153.4, %40 ]
  %.sroa.6152.3207 = phi i8 [ %.sroa.6152.2211, %32 ], [ %.sroa.6152.4, %40 ]
  %.sroa.0151.1206 = phi i16 [ %.sroa.0151.0210, %32 ], [ %.sroa.0151.2, %40 ]
  %.0172205 = phi i32 [ 0, %32 ], [ %54, %40 ]
  %41 = shl nuw nsw i32 %.0172205, 2
  %42 = lshr i32 %.0172205, 5
  %43 = add nuw nsw i32 %41, %42
  %44 = mul i32 %1, %43
  %45 = add i32 %44, 32
  %46 = add i32 %45, %36
  %47 = lshr i32 %46, 6
  %48 = sub nsw i32 %47, %3
  %49 = mul nsw i32 %48, %48
  %50 = zext i16 %.sroa.0151.1206 to i32
  %51 = icmp ult i32 %49, %50
  %52 = trunc i32 %49 to i16
  %53 = trunc nuw nsw i32 %.0172205 to i8
  %.sroa.0151.2 = select i1 %51, i16 %52, i16 %.sroa.0151.1206
  %.sroa.6152.4 = select i1 %51, i8 %37, i8 %.sroa.6152.3207
  %.sroa.7153.4 = select i1 %51, i8 %53, i8 %.sroa.7153.3208
  %54 = add nuw nsw i32 %.0172205, 1
  %exitcond.not = icmp eq i32 %54, 64
  br i1 %exitcond.not, label %38, label %40, !llvm.loop !12

.preheader201:                                    ; preds = %30, %57
  %indvars.iv289 = phi i64 [ %indvars.iv.next290, %57 ], [ 0, %30 ]
  %.sroa.7127.0228 = phi i8 [ %.sroa.7127.3.15, %57 ], [ undef, %30 ]
  %.sroa.6126.0227 = phi i8 [ %.sroa.6126.3.15, %57 ], [ undef, %30 ]
  %55 = trunc nuw nsw i64 %indvars.iv289 to i32
  br label %59

.preheader200:                                    ; preds = %57
  %56 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist14g_bc7_weights2E, i64 4), align 4, !tbaa !5
  br label %.preheader199

57:                                               ; preds = %59
  %58 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL34g_astc_4bit_3bit_optimal_endpointsE, i64 0, i64 %indvars.iv289
  store i16 %.sroa.0125.2.15, ptr %58, align 4, !tbaa !9
  %.sroa.6126.0..sroa_idx = getelementptr inbounds i8, ptr %58, i64 2
  store i8 %.sroa.6126.3.15, ptr %.sroa.6126.0..sroa_idx, align 2, !tbaa !11
  %.sroa.7127.0..sroa_idx = getelementptr inbounds i8, ptr %58, i64 3
  store i8 %.sroa.7127.3.15, ptr %.sroa.7127.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %exitcond291.not = icmp eq i64 %indvars.iv.next290, 256
  br i1 %exitcond291.not, label %.preheader200, label %.preheader201, !llvm.loop !16

59:                                               ; preds = %.preheader201, %59
  %.sroa.7127.1226 = phi i8 [ %.sroa.7127.0228, %.preheader201 ], [ %.sroa.7127.3.15, %59 ]
  %.sroa.6126.1225 = phi i8 [ %.sroa.6126.0227, %.preheader201 ], [ %.sroa.6126.3.15, %59 ]
  %.sroa.0125.0224 = phi i16 [ -1, %.preheader201 ], [ %.sroa.0125.2.15, %59 ]
  %.0177223 = phi i32 [ 0, %.preheader201 ], [ %173, %59 ]
  %60 = mul nuw nsw i32 %.0177223, 17
  %61 = trunc nuw nsw i32 %.0177223 to i8
  %62 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 0, i32 noundef %1)
  %63 = sub nsw i32 %62, %55
  %64 = mul nsw i32 %63, %63
  %65 = zext i16 %.sroa.0125.0224 to i32
  %66 = icmp ult i32 %64, %65
  %67 = trunc i32 %64 to i16
  %.sroa.0125.2 = select i1 %66, i16 %67, i16 %.sroa.0125.0224
  %.sroa.7127.3 = select i1 %66, i8 0, i8 %.sroa.7127.1226
  %68 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 17, i32 noundef %1)
  %69 = sub nsw i32 %68, %55
  %70 = mul nsw i32 %69, %69
  %71 = zext i16 %.sroa.0125.2 to i32
  %72 = icmp ult i32 %70, %71
  %73 = trunc i32 %70 to i16
  %.sroa.0125.2.1 = select i1 %72, i16 %73, i16 %.sroa.0125.2
  %.sroa.7127.3.1 = select i1 %72, i8 1, i8 %.sroa.7127.3
  %74 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 34, i32 noundef %1)
  %75 = sub nsw i32 %74, %55
  %76 = mul nsw i32 %75, %75
  %77 = zext i16 %.sroa.0125.2.1 to i32
  %78 = icmp ult i32 %76, %77
  %79 = trunc i32 %76 to i16
  %.sroa.0125.2.2 = select i1 %78, i16 %79, i16 %.sroa.0125.2.1
  %.sroa.7127.3.2 = select i1 %78, i8 2, i8 %.sroa.7127.3.1
  %80 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 51, i32 noundef %1)
  %81 = sub nsw i32 %80, %55
  %82 = mul nsw i32 %81, %81
  %83 = zext i16 %.sroa.0125.2.2 to i32
  %84 = icmp ult i32 %82, %83
  %85 = trunc i32 %82 to i16
  %.sroa.0125.2.3 = select i1 %84, i16 %85, i16 %.sroa.0125.2.2
  %.sroa.7127.3.3 = select i1 %84, i8 3, i8 %.sroa.7127.3.2
  %86 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 68, i32 noundef %1)
  %87 = sub nsw i32 %86, %55
  %88 = mul nsw i32 %87, %87
  %89 = zext i16 %.sroa.0125.2.3 to i32
  %90 = icmp ult i32 %88, %89
  %91 = trunc i32 %88 to i16
  %.sroa.0125.2.4 = select i1 %90, i16 %91, i16 %.sroa.0125.2.3
  %.sroa.7127.3.4 = select i1 %90, i8 4, i8 %.sroa.7127.3.3
  %92 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 85, i32 noundef %1)
  %93 = sub nsw i32 %92, %55
  %94 = mul nsw i32 %93, %93
  %95 = zext i16 %.sroa.0125.2.4 to i32
  %96 = icmp ult i32 %94, %95
  %97 = trunc i32 %94 to i16
  %.sroa.0125.2.5 = select i1 %96, i16 %97, i16 %.sroa.0125.2.4
  %.sroa.7127.3.5 = select i1 %96, i8 5, i8 %.sroa.7127.3.4
  %98 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 102, i32 noundef %1)
  %99 = sub nsw i32 %98, %55
  %100 = mul nsw i32 %99, %99
  %101 = zext i16 %.sroa.0125.2.5 to i32
  %102 = icmp ult i32 %100, %101
  %103 = trunc i32 %100 to i16
  %.sroa.0125.2.6 = select i1 %102, i16 %103, i16 %.sroa.0125.2.5
  %.sroa.7127.3.6 = select i1 %102, i8 6, i8 %.sroa.7127.3.5
  %104 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 119, i32 noundef %1)
  %105 = sub nsw i32 %104, %55
  %106 = mul nsw i32 %105, %105
  %107 = zext i16 %.sroa.0125.2.6 to i32
  %108 = icmp ult i32 %106, %107
  %109 = trunc i32 %106 to i16
  %.sroa.0125.2.7 = select i1 %108, i16 %109, i16 %.sroa.0125.2.6
  %.sroa.7127.3.7 = select i1 %108, i8 7, i8 %.sroa.7127.3.6
  %110 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 136, i32 noundef %1)
  %111 = sub nsw i32 %110, %55
  %112 = mul nsw i32 %111, %111
  %113 = zext i16 %.sroa.0125.2.7 to i32
  %114 = icmp ult i32 %112, %113
  %115 = trunc i32 %112 to i16
  %.sroa.0125.2.8 = select i1 %114, i16 %115, i16 %.sroa.0125.2.7
  %.sroa.7127.3.8 = select i1 %114, i8 8, i8 %.sroa.7127.3.7
  %116 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 153, i32 noundef %1)
  %117 = sub nsw i32 %116, %55
  %118 = mul nsw i32 %117, %117
  %119 = zext i16 %.sroa.0125.2.8 to i32
  %120 = icmp ult i32 %118, %119
  %121 = trunc i32 %118 to i16
  %.sroa.0125.2.9 = select i1 %120, i16 %121, i16 %.sroa.0125.2.8
  %.sroa.7127.3.9 = select i1 %120, i8 9, i8 %.sroa.7127.3.8
  %122 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 170, i32 noundef %1)
  %123 = sub nsw i32 %122, %55
  %124 = mul nsw i32 %123, %123
  %125 = zext i16 %.sroa.0125.2.9 to i32
  %126 = icmp ult i32 %124, %125
  %127 = trunc i32 %124 to i16
  %.sroa.0125.2.10 = select i1 %126, i16 %127, i16 %.sroa.0125.2.9
  %.sroa.7127.3.10 = select i1 %126, i8 10, i8 %.sroa.7127.3.9
  %128 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 187, i32 noundef %1)
  %129 = sub nsw i32 %128, %55
  %130 = mul nsw i32 %129, %129
  %131 = zext i16 %.sroa.0125.2.10 to i32
  %132 = icmp ult i32 %130, %131
  %133 = trunc i32 %130 to i16
  %.sroa.0125.2.11 = select i1 %132, i16 %133, i16 %.sroa.0125.2.10
  %.sroa.7127.3.11 = select i1 %132, i8 11, i8 %.sroa.7127.3.10
  %134 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 204, i32 noundef %1)
  %135 = sub nsw i32 %134, %55
  %136 = mul nsw i32 %135, %135
  %137 = zext i16 %.sroa.0125.2.11 to i32
  %138 = icmp ult i32 %136, %137
  %139 = trunc i32 %136 to i16
  %.sroa.0125.2.12 = select i1 %138, i16 %139, i16 %.sroa.0125.2.11
  %.sroa.7127.3.12 = select i1 %138, i8 12, i8 %.sroa.7127.3.11
  %140 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 221, i32 noundef %1)
  %141 = sub nsw i32 %140, %55
  %142 = mul nsw i32 %141, %141
  %143 = zext i16 %.sroa.0125.2.12 to i32
  %144 = icmp ult i32 %142, %143
  %145 = trunc i32 %142 to i16
  %.sroa.0125.2.13 = select i1 %144, i16 %145, i16 %.sroa.0125.2.12
  %.sroa.7127.3.13 = select i1 %144, i8 13, i8 %.sroa.7127.3.12
  %146 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 238, i32 noundef %1)
  %147 = sub nsw i32 %146, %55
  %148 = mul nsw i32 %147, %147
  %149 = zext i16 %.sroa.0125.2.13 to i32
  %150 = icmp ult i32 %148, %149
  %151 = trunc i32 %148 to i16
  %.sroa.0125.2.14 = select i1 %150, i16 %151, i16 %.sroa.0125.2.13
  %.sroa.7127.3.14 = select i1 %150, i8 14, i8 %.sroa.7127.3.13
  %152 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %60, i32 noundef 255, i32 noundef %1)
  %153 = sub nsw i32 %152, %55
  %154 = mul nsw i32 %153, %153
  %155 = zext i16 %.sroa.0125.2.14 to i32
  %156 = icmp ult i32 %154, %155
  %157 = trunc i32 %154 to i16
  %.sroa.0125.2.15 = select i1 %156, i16 %157, i16 %.sroa.0125.2.14
  %158 = select i1 %156, i1 true, i1 %150
  %159 = select i1 %158, i1 true, i1 %144
  %160 = select i1 %159, i1 true, i1 %138
  %161 = select i1 %160, i1 true, i1 %132
  %162 = select i1 %161, i1 true, i1 %126
  %163 = select i1 %162, i1 true, i1 %120
  %164 = select i1 %163, i1 true, i1 %114
  %165 = select i1 %164, i1 true, i1 %108
  %166 = select i1 %165, i1 true, i1 %102
  %167 = select i1 %166, i1 true, i1 %96
  %168 = select i1 %167, i1 true, i1 %90
  %169 = select i1 %168, i1 true, i1 %84
  %170 = select i1 %169, i1 true, i1 %78
  %171 = select i1 %170, i1 true, i1 %72
  %172 = select i1 %171, i1 true, i1 %66
  %.sroa.6126.3.15 = select i1 %172, i8 %61, i8 %.sroa.6126.1225
  %.sroa.7127.3.15 = select i1 %156, i8 15, i8 %.sroa.7127.3.14
  %173 = add nuw nsw i32 %.0177223, 1
  %exitcond288.not = icmp eq i32 %173, 16
  br i1 %exitcond288.not, label %57, label %59, !llvm.loop !17

.preheader199:                                    ; preds = %.preheader200, %176
  %indvars.iv294 = phi i64 [ 0, %.preheader200 ], [ %indvars.iv.next295, %176 ]
  %.sroa.7103.0239 = phi i8 [ undef, %.preheader200 ], [ %.sroa.7103.3.15, %176 ]
  %.sroa.6102.0238 = phi i8 [ undef, %.preheader200 ], [ %.sroa.6102.3.15, %176 ]
  %174 = trunc nuw nsw i64 %indvars.iv294 to i32
  br label %178

.preheader198:                                    ; preds = %176
  %175 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist14g_bc7_weights2E, i64 4), align 4, !tbaa !5
  br label %.preheader197

176:                                              ; preds = %178
  %177 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL34g_astc_4bit_2bit_optimal_endpointsE, i64 0, i64 %indvars.iv294
  store i16 %.sroa.0101.2.15, ptr %177, align 4, !tbaa !9
  %.sroa.6102.0..sroa_idx = getelementptr inbounds i8, ptr %177, i64 2
  store i8 %.sroa.6102.3.15, ptr %.sroa.6102.0..sroa_idx, align 2, !tbaa !11
  %.sroa.7103.0..sroa_idx = getelementptr inbounds i8, ptr %177, i64 3
  store i8 %.sroa.7103.3.15, ptr %.sroa.7103.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next295 = add nuw nsw i64 %indvars.iv294, 1
  %exitcond296.not = icmp eq i64 %indvars.iv.next295, 256
  br i1 %exitcond296.not, label %.preheader198, label %.preheader199, !llvm.loop !18

178:                                              ; preds = %.preheader199, %178
  %.sroa.7103.1237 = phi i8 [ %.sroa.7103.0239, %.preheader199 ], [ %.sroa.7103.3.15, %178 ]
  %.sroa.6102.1236 = phi i8 [ %.sroa.6102.0238, %.preheader199 ], [ %.sroa.6102.3.15, %178 ]
  %.sroa.0101.0235 = phi i16 [ -1, %.preheader199 ], [ %.sroa.0101.2.15, %178 ]
  %.0184234 = phi i32 [ 0, %.preheader199 ], [ %292, %178 ]
  %179 = mul nuw nsw i32 %.0184234, 17
  %180 = trunc nuw nsw i32 %.0184234 to i8
  %181 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 0, i32 noundef %56)
  %182 = sub nsw i32 %181, %174
  %183 = mul nsw i32 %182, %182
  %184 = zext i16 %.sroa.0101.0235 to i32
  %185 = icmp ult i32 %183, %184
  %186 = trunc i32 %183 to i16
  %.sroa.0101.2 = select i1 %185, i16 %186, i16 %.sroa.0101.0235
  %.sroa.7103.3 = select i1 %185, i8 0, i8 %.sroa.7103.1237
  %187 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 17, i32 noundef %56)
  %188 = sub nsw i32 %187, %174
  %189 = mul nsw i32 %188, %188
  %190 = zext i16 %.sroa.0101.2 to i32
  %191 = icmp ult i32 %189, %190
  %192 = trunc i32 %189 to i16
  %.sroa.0101.2.1 = select i1 %191, i16 %192, i16 %.sroa.0101.2
  %.sroa.7103.3.1 = select i1 %191, i8 1, i8 %.sroa.7103.3
  %193 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 34, i32 noundef %56)
  %194 = sub nsw i32 %193, %174
  %195 = mul nsw i32 %194, %194
  %196 = zext i16 %.sroa.0101.2.1 to i32
  %197 = icmp ult i32 %195, %196
  %198 = trunc i32 %195 to i16
  %.sroa.0101.2.2 = select i1 %197, i16 %198, i16 %.sroa.0101.2.1
  %.sroa.7103.3.2 = select i1 %197, i8 2, i8 %.sroa.7103.3.1
  %199 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 51, i32 noundef %56)
  %200 = sub nsw i32 %199, %174
  %201 = mul nsw i32 %200, %200
  %202 = zext i16 %.sroa.0101.2.2 to i32
  %203 = icmp ult i32 %201, %202
  %204 = trunc i32 %201 to i16
  %.sroa.0101.2.3 = select i1 %203, i16 %204, i16 %.sroa.0101.2.2
  %.sroa.7103.3.3 = select i1 %203, i8 3, i8 %.sroa.7103.3.2
  %205 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 68, i32 noundef %56)
  %206 = sub nsw i32 %205, %174
  %207 = mul nsw i32 %206, %206
  %208 = zext i16 %.sroa.0101.2.3 to i32
  %209 = icmp ult i32 %207, %208
  %210 = trunc i32 %207 to i16
  %.sroa.0101.2.4 = select i1 %209, i16 %210, i16 %.sroa.0101.2.3
  %.sroa.7103.3.4 = select i1 %209, i8 4, i8 %.sroa.7103.3.3
  %211 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 85, i32 noundef %56)
  %212 = sub nsw i32 %211, %174
  %213 = mul nsw i32 %212, %212
  %214 = zext i16 %.sroa.0101.2.4 to i32
  %215 = icmp ult i32 %213, %214
  %216 = trunc i32 %213 to i16
  %.sroa.0101.2.5 = select i1 %215, i16 %216, i16 %.sroa.0101.2.4
  %.sroa.7103.3.5 = select i1 %215, i8 5, i8 %.sroa.7103.3.4
  %217 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 102, i32 noundef %56)
  %218 = sub nsw i32 %217, %174
  %219 = mul nsw i32 %218, %218
  %220 = zext i16 %.sroa.0101.2.5 to i32
  %221 = icmp ult i32 %219, %220
  %222 = trunc i32 %219 to i16
  %.sroa.0101.2.6 = select i1 %221, i16 %222, i16 %.sroa.0101.2.5
  %.sroa.7103.3.6 = select i1 %221, i8 6, i8 %.sroa.7103.3.5
  %223 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 119, i32 noundef %56)
  %224 = sub nsw i32 %223, %174
  %225 = mul nsw i32 %224, %224
  %226 = zext i16 %.sroa.0101.2.6 to i32
  %227 = icmp ult i32 %225, %226
  %228 = trunc i32 %225 to i16
  %.sroa.0101.2.7 = select i1 %227, i16 %228, i16 %.sroa.0101.2.6
  %.sroa.7103.3.7 = select i1 %227, i8 7, i8 %.sroa.7103.3.6
  %229 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 136, i32 noundef %56)
  %230 = sub nsw i32 %229, %174
  %231 = mul nsw i32 %230, %230
  %232 = zext i16 %.sroa.0101.2.7 to i32
  %233 = icmp ult i32 %231, %232
  %234 = trunc i32 %231 to i16
  %.sroa.0101.2.8 = select i1 %233, i16 %234, i16 %.sroa.0101.2.7
  %.sroa.7103.3.8 = select i1 %233, i8 8, i8 %.sroa.7103.3.7
  %235 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 153, i32 noundef %56)
  %236 = sub nsw i32 %235, %174
  %237 = mul nsw i32 %236, %236
  %238 = zext i16 %.sroa.0101.2.8 to i32
  %239 = icmp ult i32 %237, %238
  %240 = trunc i32 %237 to i16
  %.sroa.0101.2.9 = select i1 %239, i16 %240, i16 %.sroa.0101.2.8
  %.sroa.7103.3.9 = select i1 %239, i8 9, i8 %.sroa.7103.3.8
  %241 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 170, i32 noundef %56)
  %242 = sub nsw i32 %241, %174
  %243 = mul nsw i32 %242, %242
  %244 = zext i16 %.sroa.0101.2.9 to i32
  %245 = icmp ult i32 %243, %244
  %246 = trunc i32 %243 to i16
  %.sroa.0101.2.10 = select i1 %245, i16 %246, i16 %.sroa.0101.2.9
  %.sroa.7103.3.10 = select i1 %245, i8 10, i8 %.sroa.7103.3.9
  %247 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 187, i32 noundef %56)
  %248 = sub nsw i32 %247, %174
  %249 = mul nsw i32 %248, %248
  %250 = zext i16 %.sroa.0101.2.10 to i32
  %251 = icmp ult i32 %249, %250
  %252 = trunc i32 %249 to i16
  %.sroa.0101.2.11 = select i1 %251, i16 %252, i16 %.sroa.0101.2.10
  %.sroa.7103.3.11 = select i1 %251, i8 11, i8 %.sroa.7103.3.10
  %253 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 204, i32 noundef %56)
  %254 = sub nsw i32 %253, %174
  %255 = mul nsw i32 %254, %254
  %256 = zext i16 %.sroa.0101.2.11 to i32
  %257 = icmp ult i32 %255, %256
  %258 = trunc i32 %255 to i16
  %.sroa.0101.2.12 = select i1 %257, i16 %258, i16 %.sroa.0101.2.11
  %.sroa.7103.3.12 = select i1 %257, i8 12, i8 %.sroa.7103.3.11
  %259 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 221, i32 noundef %56)
  %260 = sub nsw i32 %259, %174
  %261 = mul nsw i32 %260, %260
  %262 = zext i16 %.sroa.0101.2.12 to i32
  %263 = icmp ult i32 %261, %262
  %264 = trunc i32 %261 to i16
  %.sroa.0101.2.13 = select i1 %263, i16 %264, i16 %.sroa.0101.2.12
  %.sroa.7103.3.13 = select i1 %263, i8 13, i8 %.sroa.7103.3.12
  %265 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 238, i32 noundef %56)
  %266 = sub nsw i32 %265, %174
  %267 = mul nsw i32 %266, %266
  %268 = zext i16 %.sroa.0101.2.13 to i32
  %269 = icmp ult i32 %267, %268
  %270 = trunc i32 %267 to i16
  %.sroa.0101.2.14 = select i1 %269, i16 %270, i16 %.sroa.0101.2.13
  %.sroa.7103.3.14 = select i1 %269, i8 14, i8 %.sroa.7103.3.13
  %271 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %179, i32 noundef 255, i32 noundef %56)
  %272 = sub nsw i32 %271, %174
  %273 = mul nsw i32 %272, %272
  %274 = zext i16 %.sroa.0101.2.14 to i32
  %275 = icmp ult i32 %273, %274
  %276 = trunc i32 %273 to i16
  %.sroa.0101.2.15 = select i1 %275, i16 %276, i16 %.sroa.0101.2.14
  %277 = select i1 %275, i1 true, i1 %269
  %278 = select i1 %277, i1 true, i1 %263
  %279 = select i1 %278, i1 true, i1 %257
  %280 = select i1 %279, i1 true, i1 %251
  %281 = select i1 %280, i1 true, i1 %245
  %282 = select i1 %281, i1 true, i1 %239
  %283 = select i1 %282, i1 true, i1 %233
  %284 = select i1 %283, i1 true, i1 %227
  %285 = select i1 %284, i1 true, i1 %221
  %286 = select i1 %285, i1 true, i1 %215
  %287 = select i1 %286, i1 true, i1 %209
  %288 = select i1 %287, i1 true, i1 %203
  %289 = select i1 %288, i1 true, i1 %197
  %290 = select i1 %289, i1 true, i1 %191
  %291 = select i1 %290, i1 true, i1 %185
  %.sroa.6102.3.15 = select i1 %291, i8 %180, i8 %.sroa.6102.1236
  %.sroa.7103.3.15 = select i1 %275, i8 15, i8 %.sroa.7103.3.14
  %292 = add nuw nsw i32 %.0184234, 1
  %exitcond293.not = icmp eq i32 %292, 16
  br i1 %exitcond293.not, label %176, label %178, !llvm.loop !19

.preheader197:                                    ; preds = %.preheader198, %295
  %indvars.iv303 = phi i64 [ 0, %.preheader198 ], [ %indvars.iv.next304, %295 ]
  %.sroa.678.0251 = phi i8 [ undef, %.preheader198 ], [ %.sroa.678.3.11, %295 ]
  %.sroa.779.0250 = phi i8 [ undef, %.preheader198 ], [ %.sroa.779.3.11, %295 ]
  %293 = trunc nuw nsw i64 %indvars.iv303 to i32
  br label %297

.preheader196:                                    ; preds = %295
  %294 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist15g_astc_weights4E, i64 8), align 8, !tbaa !5
  br label %.preheader195

295:                                              ; preds = %297
  %296 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL36g_astc_range7_2bit_optimal_endpointsE, i64 0, i64 %indvars.iv303
  store i16 %.sroa.077.2.11, ptr %296, align 4, !tbaa !9
  %.sroa.678.0..sroa_idx = getelementptr inbounds i8, ptr %296, i64 2
  store i8 %.sroa.678.3.11, ptr %.sroa.678.0..sroa_idx, align 2, !tbaa !11
  %.sroa.779.0..sroa_idx = getelementptr inbounds i8, ptr %296, i64 3
  store i8 %.sroa.779.3.11, ptr %.sroa.779.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next304 = add nuw nsw i64 %indvars.iv303, 1
  %exitcond305.not = icmp eq i64 %indvars.iv.next304, 256
  br i1 %exitcond305.not, label %.preheader196, label %.preheader197, !llvm.loop !20

297:                                              ; preds = %.preheader197, %297
  %indvars.iv300 = phi i64 [ 0, %.preheader197 ], [ %indvars.iv.next301, %297 ]
  %.sroa.077.0247 = phi i16 [ -1, %.preheader197 ], [ %.sroa.077.2.11, %297 ]
  %.sroa.678.1246 = phi i8 [ %.sroa.678.0251, %.preheader197 ], [ %.sroa.678.3.11, %297 ]
  %.sroa.779.1245 = phi i8 [ %.sroa.779.0250, %.preheader197 ], [ %.sroa.779.3.11, %297 ]
  %298 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3584), i64 0, i64 %indvars.iv300
  %299 = load i8, ptr %298, align 2, !tbaa !21
  %300 = zext i8 %299 to i32
  %301 = trunc i64 %indvars.iv300 to i8
  %302 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3584), align 16, !tbaa !21
  %303 = zext i8 %302 to i32
  %304 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %303, i32 noundef %175)
  %305 = sub nsw i32 %304, %293
  %306 = mul nsw i32 %305, %305
  %307 = zext i16 %.sroa.077.0247 to i32
  %308 = icmp ult i32 %306, %307
  %309 = trunc i32 %306 to i16
  %.sroa.779.3 = select i1 %308, i8 0, i8 %.sroa.779.1245
  %.sroa.077.2 = select i1 %308, i16 %309, i16 %.sroa.077.0247
  %310 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3586), align 2, !tbaa !21
  %311 = zext i8 %310 to i32
  %312 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %311, i32 noundef %175)
  %313 = sub nsw i32 %312, %293
  %314 = mul nsw i32 %313, %313
  %315 = zext i16 %.sroa.077.2 to i32
  %316 = icmp ult i32 %314, %315
  %317 = trunc i32 %314 to i16
  %.sroa.779.3.1 = select i1 %316, i8 1, i8 %.sroa.779.3
  %.sroa.077.2.1 = select i1 %316, i16 %317, i16 %.sroa.077.2
  %318 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3588), align 4, !tbaa !21
  %319 = zext i8 %318 to i32
  %320 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %319, i32 noundef %175)
  %321 = sub nsw i32 %320, %293
  %322 = mul nsw i32 %321, %321
  %323 = zext i16 %.sroa.077.2.1 to i32
  %324 = icmp ult i32 %322, %323
  %325 = trunc i32 %322 to i16
  %.sroa.779.3.2 = select i1 %324, i8 2, i8 %.sroa.779.3.1
  %.sroa.077.2.2 = select i1 %324, i16 %325, i16 %.sroa.077.2.1
  %326 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3590), align 2, !tbaa !21
  %327 = zext i8 %326 to i32
  %328 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %327, i32 noundef %175)
  %329 = sub nsw i32 %328, %293
  %330 = mul nsw i32 %329, %329
  %331 = zext i16 %.sroa.077.2.2 to i32
  %332 = icmp ult i32 %330, %331
  %333 = trunc i32 %330 to i16
  %.sroa.779.3.3 = select i1 %332, i8 3, i8 %.sroa.779.3.2
  %.sroa.077.2.3 = select i1 %332, i16 %333, i16 %.sroa.077.2.2
  %334 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3592), align 8, !tbaa !21
  %335 = zext i8 %334 to i32
  %336 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %335, i32 noundef %175)
  %337 = sub nsw i32 %336, %293
  %338 = mul nsw i32 %337, %337
  %339 = zext i16 %.sroa.077.2.3 to i32
  %340 = icmp ult i32 %338, %339
  %341 = trunc i32 %338 to i16
  %.sroa.779.3.4 = select i1 %340, i8 4, i8 %.sroa.779.3.3
  %.sroa.077.2.4 = select i1 %340, i16 %341, i16 %.sroa.077.2.3
  %342 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3594), align 2, !tbaa !21
  %343 = zext i8 %342 to i32
  %344 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %343, i32 noundef %175)
  %345 = sub nsw i32 %344, %293
  %346 = mul nsw i32 %345, %345
  %347 = zext i16 %.sroa.077.2.4 to i32
  %348 = icmp ult i32 %346, %347
  %349 = trunc i32 %346 to i16
  %.sroa.779.3.5 = select i1 %348, i8 5, i8 %.sroa.779.3.4
  %.sroa.077.2.5 = select i1 %348, i16 %349, i16 %.sroa.077.2.4
  %350 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3596), align 4, !tbaa !21
  %351 = zext i8 %350 to i32
  %352 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %351, i32 noundef %175)
  %353 = sub nsw i32 %352, %293
  %354 = mul nsw i32 %353, %353
  %355 = zext i16 %.sroa.077.2.5 to i32
  %356 = icmp ult i32 %354, %355
  %357 = trunc i32 %354 to i16
  %.sroa.779.3.6 = select i1 %356, i8 6, i8 %.sroa.779.3.5
  %.sroa.077.2.6 = select i1 %356, i16 %357, i16 %.sroa.077.2.5
  %358 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3598), align 2, !tbaa !21
  %359 = zext i8 %358 to i32
  %360 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %359, i32 noundef %175)
  %361 = sub nsw i32 %360, %293
  %362 = mul nsw i32 %361, %361
  %363 = zext i16 %.sroa.077.2.6 to i32
  %364 = icmp ult i32 %362, %363
  %365 = trunc i32 %362 to i16
  %.sroa.779.3.7 = select i1 %364, i8 7, i8 %.sroa.779.3.6
  %.sroa.077.2.7 = select i1 %364, i16 %365, i16 %.sroa.077.2.6
  %366 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3600), align 16, !tbaa !21
  %367 = zext i8 %366 to i32
  %368 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %367, i32 noundef %175)
  %369 = sub nsw i32 %368, %293
  %370 = mul nsw i32 %369, %369
  %371 = zext i16 %.sroa.077.2.7 to i32
  %372 = icmp ult i32 %370, %371
  %373 = trunc i32 %370 to i16
  %.sroa.779.3.8 = select i1 %372, i8 8, i8 %.sroa.779.3.7
  %.sroa.077.2.8 = select i1 %372, i16 %373, i16 %.sroa.077.2.7
  %374 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3602), align 2, !tbaa !21
  %375 = zext i8 %374 to i32
  %376 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %375, i32 noundef %175)
  %377 = sub nsw i32 %376, %293
  %378 = mul nsw i32 %377, %377
  %379 = zext i16 %.sroa.077.2.8 to i32
  %380 = icmp ult i32 %378, %379
  %381 = trunc i32 %378 to i16
  %.sroa.779.3.9 = select i1 %380, i8 9, i8 %.sroa.779.3.8
  %.sroa.077.2.9 = select i1 %380, i16 %381, i16 %.sroa.077.2.8
  %382 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3604), align 4, !tbaa !21
  %383 = zext i8 %382 to i32
  %384 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %383, i32 noundef %175)
  %385 = sub nsw i32 %384, %293
  %386 = mul nsw i32 %385, %385
  %387 = zext i16 %.sroa.077.2.9 to i32
  %388 = icmp ult i32 %386, %387
  %389 = trunc i32 %386 to i16
  %.sroa.779.3.10 = select i1 %388, i8 10, i8 %.sroa.779.3.9
  %.sroa.077.2.10 = select i1 %388, i16 %389, i16 %.sroa.077.2.9
  %390 = load i8, ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 3606), align 2, !tbaa !21
  %391 = zext i8 %390 to i32
  %392 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %300, i32 noundef %391, i32 noundef %175)
  %393 = sub nsw i32 %392, %293
  %394 = mul nsw i32 %393, %393
  %395 = zext i16 %.sroa.077.2.10 to i32
  %396 = icmp ult i32 %394, %395
  %397 = trunc i32 %394 to i16
  %.sroa.779.3.11 = select i1 %396, i8 11, i8 %.sroa.779.3.10
  %398 = select i1 %396, i1 true, i1 %388
  %399 = select i1 %398, i1 true, i1 %380
  %400 = select i1 %399, i1 true, i1 %372
  %401 = select i1 %400, i1 true, i1 %364
  %402 = select i1 %401, i1 true, i1 %356
  %403 = select i1 %402, i1 true, i1 %348
  %404 = select i1 %403, i1 true, i1 %340
  %405 = select i1 %404, i1 true, i1 %332
  %406 = select i1 %405, i1 true, i1 %324
  %407 = select i1 %406, i1 true, i1 %316
  %408 = select i1 %407, i1 true, i1 %308
  %.sroa.678.3.11 = select i1 %408, i8 %301, i8 %.sroa.678.1246
  %.sroa.077.2.11 = select i1 %396, i16 %397, i16 %.sroa.077.2.10
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %exitcond302.not = icmp eq i64 %indvars.iv.next301, 12
  br i1 %exitcond302.not, label %295, label %297, !llvm.loop !23

.preheader195:                                    ; preds = %.preheader196, %411
  %indvars.iv312 = phi i64 [ 0, %.preheader196 ], [ %indvars.iv.next313, %411 ]
  %.sroa.656.0262 = phi i8 [ undef, %.preheader196 ], [ %.sroa.656.3, %411 ]
  %.sroa.757.0261 = phi i8 [ undef, %.preheader196 ], [ %.sroa.757.3, %411 ]
  %409 = trunc nuw nsw i64 %indvars.iv312 to i32
  br label %413

.preheader194:                                    ; preds = %411
  %410 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist14g_bc7_weights2E, i64 4), align 4, !tbaa !5
  br label %.preheader193

411:                                              ; preds = %418
  %412 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range13_4bit_optimal_endpointsE, i64 0, i64 %indvars.iv312
  store i16 %.sroa.055.2, ptr %412, align 4, !tbaa !9
  %.sroa.656.0..sroa_idx = getelementptr inbounds i8, ptr %412, i64 2
  store i8 %.sroa.656.3, ptr %.sroa.656.0..sroa_idx, align 2, !tbaa !11
  %.sroa.757.0..sroa_idx = getelementptr inbounds i8, ptr %412, i64 3
  store i8 %.sroa.757.3, ptr %.sroa.757.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 1
  %exitcond314.not = icmp eq i64 %indvars.iv.next313, 256
  br i1 %exitcond314.not, label %.preheader194, label %.preheader195, !llvm.loop !24

413:                                              ; preds = %.preheader195, %418
  %indvars.iv309 = phi i64 [ 0, %.preheader195 ], [ %indvars.iv.next310, %418 ]
  %.sroa.055.0258 = phi i16 [ -1, %.preheader195 ], [ %.sroa.055.2, %418 ]
  %.sroa.656.1257 = phi i8 [ %.sroa.656.0262, %.preheader195 ], [ %.sroa.656.3, %418 ]
  %.sroa.757.1256 = phi i8 [ %.sroa.757.0261, %.preheader195 ], [ %.sroa.757.3, %418 ]
  %414 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 6656), i64 0, i64 %indvars.iv309
  %415 = load i8, ptr %414, align 2, !tbaa !21
  %416 = zext i8 %415 to i32
  %417 = trunc i64 %indvars.iv309 to i8
  br label %419

418:                                              ; preds = %419
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %exitcond311.not = icmp eq i64 %indvars.iv.next310, 48
  br i1 %exitcond311.not, label %411, label %413, !llvm.loop !25

419:                                              ; preds = %413, %419
  %indvars.iv306 = phi i64 [ 0, %413 ], [ %indvars.iv.next307, %419 ]
  %.sroa.055.1254 = phi i16 [ %.sroa.055.0258, %413 ], [ %.sroa.055.2, %419 ]
  %.sroa.656.2253 = phi i8 [ %.sroa.656.1257, %413 ], [ %.sroa.656.3, %419 ]
  %.sroa.757.2252 = phi i8 [ %.sroa.757.1256, %413 ], [ %.sroa.757.3, %419 ]
  %420 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 6656), i64 0, i64 %indvars.iv306
  %421 = load i8, ptr %420, align 2, !tbaa !21
  %422 = zext i8 %421 to i32
  %423 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %416, i32 noundef %422, i32 noundef %294)
  %424 = sub nsw i32 %423, %409
  %425 = mul nsw i32 %424, %424
  %426 = zext i16 %.sroa.055.1254 to i32
  %427 = icmp ult i32 %425, %426
  %428 = trunc i32 %425 to i16
  %429 = trunc i64 %indvars.iv306 to i8
  %.sroa.757.3 = select i1 %427, i8 %429, i8 %.sroa.757.2252
  %.sroa.656.3 = select i1 %427, i8 %417, i8 %.sroa.656.2253
  %.sroa.055.2 = select i1 %427, i16 %428, i16 %.sroa.055.1254
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  %exitcond308.not = icmp eq i64 %indvars.iv.next307, 48
  br i1 %exitcond308.not, label %418, label %419, !llvm.loop !26

.preheader193:                                    ; preds = %.preheader194, %432
  %indvars.iv321 = phi i64 [ 0, %.preheader194 ], [ %indvars.iv.next322, %432 ]
  %.sroa.634.0273 = phi i8 [ undef, %.preheader194 ], [ %.sroa.634.3, %432 ]
  %.sroa.735.0272 = phi i8 [ undef, %.preheader194 ], [ %.sroa.735.3, %432 ]
  %430 = trunc nuw nsw i64 %indvars.iv321 to i32
  br label %434

.preheader192:                                    ; preds = %432
  %431 = load i32, ptr getelementptr inbounds (i8, ptr @_ZN6basist15g_astc_weights5E, i64 52), align 4, !tbaa !5
  br label %.preheader

432:                                              ; preds = %439
  %433 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range13_2bit_optimal_endpointsE, i64 0, i64 %indvars.iv321
  store i16 %.sroa.033.2, ptr %433, align 4, !tbaa !9
  %.sroa.634.0..sroa_idx = getelementptr inbounds i8, ptr %433, i64 2
  store i8 %.sroa.634.3, ptr %.sroa.634.0..sroa_idx, align 2, !tbaa !11
  %.sroa.735.0..sroa_idx = getelementptr inbounds i8, ptr %433, i64 3
  store i8 %.sroa.735.3, ptr %.sroa.735.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next322 = add nuw nsw i64 %indvars.iv321, 1
  %exitcond323.not = icmp eq i64 %indvars.iv.next322, 256
  br i1 %exitcond323.not, label %.preheader192, label %.preheader193, !llvm.loop !27

434:                                              ; preds = %.preheader193, %439
  %indvars.iv318 = phi i64 [ 0, %.preheader193 ], [ %indvars.iv.next319, %439 ]
  %.sroa.033.0269 = phi i16 [ -1, %.preheader193 ], [ %.sroa.033.2, %439 ]
  %.sroa.634.1268 = phi i8 [ %.sroa.634.0273, %.preheader193 ], [ %.sroa.634.3, %439 ]
  %.sroa.735.1267 = phi i8 [ %.sroa.735.0272, %.preheader193 ], [ %.sroa.735.3, %439 ]
  %435 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 6656), i64 0, i64 %indvars.iv318
  %436 = load i8, ptr %435, align 2, !tbaa !21
  %437 = zext i8 %436 to i32
  %438 = trunc i64 %indvars.iv318 to i8
  br label %440

439:                                              ; preds = %440
  %indvars.iv.next319 = add nuw nsw i64 %indvars.iv318, 1
  %exitcond320.not = icmp eq i64 %indvars.iv.next319, 48
  br i1 %exitcond320.not, label %432, label %434, !llvm.loop !28

440:                                              ; preds = %434, %440
  %indvars.iv315 = phi i64 [ 0, %434 ], [ %indvars.iv.next316, %440 ]
  %.sroa.033.1265 = phi i16 [ %.sroa.033.0269, %434 ], [ %.sroa.033.2, %440 ]
  %.sroa.634.2264 = phi i8 [ %.sroa.634.1268, %434 ], [ %.sroa.634.3, %440 ]
  %.sroa.735.2263 = phi i8 [ %.sroa.735.1267, %434 ], [ %.sroa.735.3, %440 ]
  %441 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 6656), i64 0, i64 %indvars.iv315
  %442 = load i8, ptr %441, align 2, !tbaa !21
  %443 = zext i8 %442 to i32
  %444 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %437, i32 noundef %443, i32 noundef %410)
  %445 = sub nsw i32 %444, %430
  %446 = mul nsw i32 %445, %445
  %447 = zext i16 %.sroa.033.1265 to i32
  %448 = icmp ult i32 %446, %447
  %449 = trunc i32 %446 to i16
  %450 = trunc i64 %indvars.iv315 to i8
  %.sroa.735.3 = select i1 %448, i8 %450, i8 %.sroa.735.2263
  %.sroa.634.3 = select i1 %448, i8 %438, i8 %.sroa.634.2264
  %.sroa.033.2 = select i1 %448, i16 %449, i16 %.sroa.033.1265
  %indvars.iv.next316 = add nuw nsw i64 %indvars.iv315, 1
  %exitcond317.not = icmp eq i64 %indvars.iv.next316, 48
  br i1 %exitcond317.not, label %439, label %440, !llvm.loop !29

.preheader:                                       ; preds = %.preheader192, %453
  %indvars.iv330 = phi i64 [ 0, %.preheader192 ], [ %indvars.iv.next331, %453 ]
  %.sroa.6.0284 = phi i8 [ undef, %.preheader192 ], [ %.sroa.6.3, %453 ]
  %.sroa.7.0283 = phi i8 [ undef, %.preheader192 ], [ %.sroa.7.3, %453 ]
  %451 = trunc nuw nsw i64 %indvars.iv330 to i32
  br label %455

452:                                              ; preds = %453
  ret void

453:                                              ; preds = %460
  %454 = getelementptr inbounds [256 x %"struct.basist::endpoint_err"], ptr @_ZN6basisuL37g_astc_range11_5bit_optimal_endpointsE, i64 0, i64 %indvars.iv330
  store i16 %.sroa.0.2, ptr %454, align 4, !tbaa !9
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %454, i64 2
  store i8 %.sroa.6.3, ptr %.sroa.6.0..sroa_idx, align 2, !tbaa !11
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %454, i64 3
  store i8 %.sroa.7.3, ptr %.sroa.7.0..sroa_idx, align 1, !tbaa !11
  %indvars.iv.next331 = add nuw nsw i64 %indvars.iv330, 1
  %exitcond332.not = icmp eq i64 %indvars.iv.next331, 256
  br i1 %exitcond332.not, label %452, label %.preheader, !llvm.loop !30

455:                                              ; preds = %.preheader, %460
  %indvars.iv327 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next328, %460 ]
  %.sroa.0.0280 = phi i16 [ -1, %.preheader ], [ %.sroa.0.2, %460 ]
  %.sroa.6.1279 = phi i8 [ %.sroa.6.0284, %.preheader ], [ %.sroa.6.3, %460 ]
  %.sroa.7.1278 = phi i8 [ %.sroa.7.0283, %.preheader ], [ %.sroa.7.3, %460 ]
  %456 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 5632), i64 0, i64 %indvars.iv327
  %457 = load i8, ptr %456, align 2, !tbaa !21
  %458 = zext i8 %457 to i32
  %459 = trunc i64 %indvars.iv327 to i8
  br label %461

460:                                              ; preds = %461
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %exitcond329.not = icmp eq i64 %indvars.iv.next328, 32
  br i1 %exitcond329.not, label %453, label %455, !llvm.loop !31

461:                                              ; preds = %455, %461
  %indvars.iv324 = phi i64 [ 0, %455 ], [ %indvars.iv.next325, %461 ]
  %.sroa.0.1276 = phi i16 [ %.sroa.0.0280, %455 ], [ %.sroa.0.2, %461 ]
  %.sroa.6.2275 = phi i8 [ %.sroa.6.1279, %455 ], [ %.sroa.6.3, %461 ]
  %.sroa.7.2274 = phi i8 [ %.sroa.7.1278, %455 ], [ %.sroa.7.3, %461 ]
  %462 = getelementptr inbounds [256 x %"struct.basist::astc_quant_bin"], ptr getelementptr inbounds (i8, ptr @_ZN6basisu27g_astc_sorted_order_unquantE, i64 5632), i64 0, i64 %indvars.iv324
  %463 = load i8, ptr %462, align 2, !tbaa !21
  %464 = zext i8 %463 to i32
  %465 = tail call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %458, i32 noundef %464, i32 noundef %431)
  %466 = sub nsw i32 %465, %451
  %467 = mul nsw i32 %466, %466
  %468 = zext i16 %.sroa.0.1276 to i32
  %469 = icmp ult i32 %467, %468
  %470 = trunc i32 %467 to i16
  %471 = trunc i64 %indvars.iv324 to i8
  %.sroa.7.3 = select i1 %469, i8 %471, i8 %.sroa.7.2274
  %.sroa.6.3 = select i1 %469, i8 %459, i8 %.sroa.6.2275
  %.sroa.0.2 = select i1 %469, i16 %470, i16 %.sroa.0.1276
  %indvars.iv.next325 = add nuw nsw i64 %indvars.iv324, 1
  %exitcond326.not = icmp eq i64 %indvars.iv.next325, 32
  br i1 %exitcond326.not, label %460, label %461, !llvm.loop !32
}

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN6basisuL9astc_initEv() local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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 = { 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" }

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

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


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