; 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::color_quad_u8" = type { [4 x i8] }

@.str.3 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_ = external hidden unnamed_addr constant [148 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_(i32 noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i64 noundef %5, ptr noundef %6) #4 {
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca %"struct.basist::color_quad_u8", align 1
  %28 = alloca %"struct.basist::color_quad_u8", align 1
  %29 = alloca [32 x %"struct.basist::color_quad_u8"], align 16
  %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 [32 x i32], align 16
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca [31 x i32], align 16
  %39 = alloca i32, align 4
  %40 = alloca i64, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca ptr, align 8
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca ptr, align 8
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca ptr, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca ptr, align 8
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  store i32 %0, ptr %8, align 4, !tbaa !5
  store i32 %1, ptr %9, align 4, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !9
  store i32 %3, ptr %11, align 4, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !9
  store i64 %5, ptr %13, align 8, !tbaa !11
  store ptr %6, ptr %14, align 8, !tbaa !9
  %80 = load i32, ptr %9, align 4, !tbaa !5
  %81 = icmp eq i32 %80, 3
  br i1 %81, label %85, label %82

82:                                               ; preds = %7
  %83 = load i32, ptr %9, align 4, !tbaa !5
  %84 = icmp eq i32 %83, 4
  br label %85

85:                                               ; preds = %82, %7
  %86 = phi i1 [ true, %7 ], [ %84, %82 ]
  br i1 %86, label %87, label %88

87:                                               ; preds = %85
  br label %90

88:                                               ; preds = %85
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.3, i32 noundef 1766, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

89:                                               ; No predecessors!
  br label %90

90:                                               ; preds = %89, %87
  %91 = load i32, ptr %8, align 4, !tbaa !5
  %92 = icmp uge i32 %91, 1
  br i1 %92, label %93, label %96

93:                                               ; preds = %90
  %94 = load i32, ptr %8, align 4, !tbaa !5
  %95 = icmp ule i32 %94, 32
  br label %96

96:                                               ; preds = %93, %90
  %97 = phi i1 [ false, %90 ], [ %95, %93 ]
  br i1 %97, label %98, label %99

98:                                               ; preds = %96
  br label %101

99:                                               ; preds = %96
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.3, i32 noundef 1767, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

100:                                              ; No predecessors!
  br label %101

101:                                              ; preds = %100, %98
  %102 = load ptr, ptr %10, align 8, !tbaa !9
  %103 = getelementptr inbounds i32, ptr %102, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !5
  %105 = icmp eq i32 %104, 0
  br i1 %105, label %106, label %114

106:                                              ; preds = %101
  %107 = load ptr, ptr %10, align 8, !tbaa !9
  %108 = load i32, ptr %8, align 4, !tbaa !5
  %109 = sub i32 %108, 1
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %107, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !5
  %113 = icmp eq i32 %112, 64
  br label %114

114:                                              ; preds = %106, %101
  %115 = phi i1 [ false, %101 ], [ %113, %106 ]
  br i1 %115, label %116, label %117

116:                                              ; preds = %114
  br label %119

117:                                              ; preds = %114
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.3, i32 noundef 1768, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

118:                                              ; No predecessors!
  br label %119

119:                                              ; preds = %118, %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 255, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 255, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 255, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 255, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  store i32 0, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  store i32 0, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !5
  %120 = load i32, ptr %9, align 4, !tbaa !5
  %121 = icmp eq i32 %120, 4
  br i1 %121, label %122, label %249

122:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %123

123:                                              ; preds = %245, %122
  %124 = load i32, ptr %23, align 4, !tbaa !5
  %125 = load i32, ptr %11, align 4, !tbaa !5
  %126 = icmp ult i32 %124, %125
  br i1 %126, label %128, label %127

127:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %248

128:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %129 = load ptr, ptr %12, align 8, !tbaa !9
  %130 = load i32, ptr %23, align 4, !tbaa !5
  %131 = zext i32 %130 to i64
  %132 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %129, i64 %131
  store ptr %132, ptr %24, align 8, !tbaa !9
  %133 = load ptr, ptr %24, align 8, !tbaa !9
  %134 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %133, i32 0, i32 0
  %135 = getelementptr inbounds [4 x i8], ptr %134, i64 0, i64 0
  %136 = load i8, ptr %135, align 1, !tbaa !13
  %137 = zext i8 %136 to i32
  %138 = load i32, ptr %15, align 4, !tbaa !5
  %139 = icmp ult i32 %137, %138
  br i1 %139, label %140, label %146

140:                                              ; preds = %128
  %141 = load ptr, ptr %24, align 8, !tbaa !9
  %142 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds [4 x i8], ptr %142, i64 0, i64 0
  %144 = load i8, ptr %143, align 1, !tbaa !13
  %145 = zext i8 %144 to i32
  store i32 %145, ptr %15, align 4, !tbaa !5
  br label %146

146:                                              ; preds = %140, %128
  %147 = load ptr, ptr %24, align 8, !tbaa !9
  %148 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %147, i32 0, i32 0
  %149 = getelementptr inbounds [4 x i8], ptr %148, i64 0, i64 1
  %150 = load i8, ptr %149, align 1, !tbaa !13
  %151 = zext i8 %150 to i32
  %152 = load i32, ptr %16, align 4, !tbaa !5
  %153 = icmp ult i32 %151, %152
  br i1 %153, label %154, label %160

154:                                              ; preds = %146
  %155 = load ptr, ptr %24, align 8, !tbaa !9
  %156 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %155, i32 0, i32 0
  %157 = getelementptr inbounds [4 x i8], ptr %156, i64 0, i64 1
  %158 = load i8, ptr %157, align 1, !tbaa !13
  %159 = zext i8 %158 to i32
  store i32 %159, ptr %16, align 4, !tbaa !5
  br label %160

160:                                              ; preds = %154, %146
  %161 = load ptr, ptr %24, align 8, !tbaa !9
  %162 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %161, i32 0, i32 0
  %163 = getelementptr inbounds [4 x i8], ptr %162, i64 0, i64 2
  %164 = load i8, ptr %163, align 1, !tbaa !13
  %165 = zext i8 %164 to i32
  %166 = load i32, ptr %17, align 4, !tbaa !5
  %167 = icmp ult i32 %165, %166
  br i1 %167, label %168, label %174

168:                                              ; preds = %160
  %169 = load ptr, ptr %24, align 8, !tbaa !9
  %170 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %169, i32 0, i32 0
  %171 = getelementptr inbounds [4 x i8], ptr %170, i64 0, i64 2
  %172 = load i8, ptr %171, align 1, !tbaa !13
  %173 = zext i8 %172 to i32
  store i32 %173, ptr %17, align 4, !tbaa !5
  br label %174

174:                                              ; preds = %168, %160
  %175 = load ptr, ptr %24, align 8, !tbaa !9
  %176 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %175, i32 0, i32 0
  %177 = getelementptr inbounds [4 x i8], ptr %176, i64 0, i64 3
  %178 = load i8, ptr %177, align 1, !tbaa !13
  %179 = zext i8 %178 to i32
  %180 = load i32, ptr %18, align 4, !tbaa !5
  %181 = icmp ult i32 %179, %180
  br i1 %181, label %182, label %188

182:                                              ; preds = %174
  %183 = load ptr, ptr %24, align 8, !tbaa !9
  %184 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %183, i32 0, i32 0
  %185 = getelementptr inbounds [4 x i8], ptr %184, i64 0, i64 3
  %186 = load i8, ptr %185, align 1, !tbaa !13
  %187 = zext i8 %186 to i32
  store i32 %187, ptr %18, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %182, %174
  %189 = load ptr, ptr %24, align 8, !tbaa !9
  %190 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %189, i32 0, i32 0
  %191 = getelementptr inbounds [4 x i8], ptr %190, i64 0, i64 0
  %192 = load i8, ptr %191, align 1, !tbaa !13
  %193 = zext i8 %192 to i32
  %194 = load i32, ptr %19, align 4, !tbaa !5
  %195 = icmp ugt i32 %193, %194
  br i1 %195, label %196, label %202

196:                                              ; preds = %188
  %197 = load ptr, ptr %24, align 8, !tbaa !9
  %198 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %197, i32 0, i32 0
  %199 = getelementptr inbounds [4 x i8], ptr %198, i64 0, i64 0
  %200 = load i8, ptr %199, align 1, !tbaa !13
  %201 = zext i8 %200 to i32
  store i32 %201, ptr %19, align 4, !tbaa !5
  br label %202

202:                                              ; preds = %196, %188
  %203 = load ptr, ptr %24, align 8, !tbaa !9
  %204 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %203, i32 0, i32 0
  %205 = getelementptr inbounds [4 x i8], ptr %204, i64 0, i64 1
  %206 = load i8, ptr %205, align 1, !tbaa !13
  %207 = zext i8 %206 to i32
  %208 = load i32, ptr %20, align 4, !tbaa !5
  %209 = icmp ugt i32 %207, %208
  br i1 %209, label %210, label %216

210:                                              ; preds = %202
  %211 = load ptr, ptr %24, align 8, !tbaa !9
  %212 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %211, i32 0, i32 0
  %213 = getelementptr inbounds [4 x i8], ptr %212, i64 0, i64 1
  %214 = load i8, ptr %213, align 1, !tbaa !13
  %215 = zext i8 %214 to i32
  store i32 %215, ptr %20, align 4, !tbaa !5
  br label %216

216:                                              ; preds = %210, %202
  %217 = load ptr, ptr %24, align 8, !tbaa !9
  %218 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %217, i32 0, i32 0
  %219 = getelementptr inbounds [4 x i8], ptr %218, i64 0, i64 2
  %220 = load i8, ptr %219, align 1, !tbaa !13
  %221 = zext i8 %220 to i32
  %222 = load i32, ptr %21, align 4, !tbaa !5
  %223 = icmp ugt i32 %221, %222
  br i1 %223, label %224, label %230

224:                                              ; preds = %216
  %225 = load ptr, ptr %24, align 8, !tbaa !9
  %226 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %225, i32 0, i32 0
  %227 = getelementptr inbounds [4 x i8], ptr %226, i64 0, i64 2
  %228 = load i8, ptr %227, align 1, !tbaa !13
  %229 = zext i8 %228 to i32
  store i32 %229, ptr %21, align 4, !tbaa !5
  br label %230

230:                                              ; preds = %224, %216
  %231 = load ptr, ptr %24, align 8, !tbaa !9
  %232 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %231, i32 0, i32 0
  %233 = getelementptr inbounds [4 x i8], ptr %232, i64 0, i64 3
  %234 = load i8, ptr %233, align 1, !tbaa !13
  %235 = zext i8 %234 to i32
  %236 = load i32, ptr %22, align 4, !tbaa !5
  %237 = icmp ugt i32 %235, %236
  br i1 %237, label %238, label %244

238:                                              ; preds = %230
  %239 = load ptr, ptr %24, align 8, !tbaa !9
  %240 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %239, i32 0, i32 0
  %241 = getelementptr inbounds [4 x i8], ptr %240, i64 0, i64 3
  %242 = load i8, ptr %241, align 1, !tbaa !13
  %243 = zext i8 %242 to i32
  store i32 %243, ptr %22, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %238, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %245

245:                                              ; preds = %244
  %246 = load i32, ptr %23, align 4, !tbaa !5
  %247 = add i32 %246, 1
  store i32 %247, ptr %23, align 4, !tbaa !5
  br label %123, !llvm.loop !14

248:                                              ; preds = %127
  br label %348

249:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !5
  br label %250

250:                                              ; preds = %344, %249
  %251 = load i32, ptr %25, align 4, !tbaa !5
  %252 = load i32, ptr %11, align 4, !tbaa !5
  %253 = icmp ult i32 %251, %252
  br i1 %253, label %255, label %254

254:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %347

255:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %256 = load ptr, ptr %12, align 8, !tbaa !9
  %257 = load i32, ptr %25, align 4, !tbaa !5
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %256, i64 %258
  store ptr %259, ptr %26, align 8, !tbaa !9
  %260 = load ptr, ptr %26, align 8, !tbaa !9
  %261 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %260, i32 0, i32 0
  %262 = getelementptr inbounds [4 x i8], ptr %261, i64 0, i64 0
  %263 = load i8, ptr %262, align 1, !tbaa !13
  %264 = zext i8 %263 to i32
  %265 = load i32, ptr %15, align 4, !tbaa !5
  %266 = icmp ult i32 %264, %265
  br i1 %266, label %267, label %273

267:                                              ; preds = %255
  %268 = load ptr, ptr %26, align 8, !tbaa !9
  %269 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %268, i32 0, i32 0
  %270 = getelementptr inbounds [4 x i8], ptr %269, i64 0, i64 0
  %271 = load i8, ptr %270, align 1, !tbaa !13
  %272 = zext i8 %271 to i32
  store i32 %272, ptr %15, align 4, !tbaa !5
  br label %273

273:                                              ; preds = %267, %255
  %274 = load ptr, ptr %26, align 8, !tbaa !9
  %275 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %274, i32 0, i32 0
  %276 = getelementptr inbounds [4 x i8], ptr %275, i64 0, i64 1
  %277 = load i8, ptr %276, align 1, !tbaa !13
  %278 = zext i8 %277 to i32
  %279 = load i32, ptr %16, align 4, !tbaa !5
  %280 = icmp ult i32 %278, %279
  br i1 %280, label %281, label %287

281:                                              ; preds = %273
  %282 = load ptr, ptr %26, align 8, !tbaa !9
  %283 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds [4 x i8], ptr %283, i64 0, i64 1
  %285 = load i8, ptr %284, align 1, !tbaa !13
  %286 = zext i8 %285 to i32
  store i32 %286, ptr %16, align 4, !tbaa !5
  br label %287

287:                                              ; preds = %281, %273
  %288 = load ptr, ptr %26, align 8, !tbaa !9
  %289 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %288, i32 0, i32 0
  %290 = getelementptr inbounds [4 x i8], ptr %289, i64 0, i64 2
  %291 = load i8, ptr %290, align 1, !tbaa !13
  %292 = zext i8 %291 to i32
  %293 = load i32, ptr %17, align 4, !tbaa !5
  %294 = icmp ult i32 %292, %293
  br i1 %294, label %295, label %301

295:                                              ; preds = %287
  %296 = load ptr, ptr %26, align 8, !tbaa !9
  %297 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %296, i32 0, i32 0
  %298 = getelementptr inbounds [4 x i8], ptr %297, i64 0, i64 2
  %299 = load i8, ptr %298, align 1, !tbaa !13
  %300 = zext i8 %299 to i32
  store i32 %300, ptr %17, align 4, !tbaa !5
  br label %301

301:                                              ; preds = %295, %287
  %302 = load ptr, ptr %26, align 8, !tbaa !9
  %303 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %302, i32 0, i32 0
  %304 = getelementptr inbounds [4 x i8], ptr %303, i64 0, i64 0
  %305 = load i8, ptr %304, align 1, !tbaa !13
  %306 = zext i8 %305 to i32
  %307 = load i32, ptr %19, align 4, !tbaa !5
  %308 = icmp ugt i32 %306, %307
  br i1 %308, label %309, label %315

309:                                              ; preds = %301
  %310 = load ptr, ptr %26, align 8, !tbaa !9
  %311 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %310, i32 0, i32 0
  %312 = getelementptr inbounds [4 x i8], ptr %311, i64 0, i64 0
  %313 = load i8, ptr %312, align 1, !tbaa !13
  %314 = zext i8 %313 to i32
  store i32 %314, ptr %19, align 4, !tbaa !5
  br label %315

315:                                              ; preds = %309, %301
  %316 = load ptr, ptr %26, align 8, !tbaa !9
  %317 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %316, i32 0, i32 0
  %318 = getelementptr inbounds [4 x i8], ptr %317, i64 0, i64 1
  %319 = load i8, ptr %318, align 1, !tbaa !13
  %320 = zext i8 %319 to i32
  %321 = load i32, ptr %20, align 4, !tbaa !5
  %322 = icmp ugt i32 %320, %321
  br i1 %322, label %323, label %329

323:                                              ; preds = %315
  %324 = load ptr, ptr %26, align 8, !tbaa !9
  %325 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %324, i32 0, i32 0
  %326 = getelementptr inbounds [4 x i8], ptr %325, i64 0, i64 1
  %327 = load i8, ptr %326, align 1, !tbaa !13
  %328 = zext i8 %327 to i32
  store i32 %328, ptr %20, align 4, !tbaa !5
  br label %329

329:                                              ; preds = %323, %315
  %330 = load ptr, ptr %26, align 8, !tbaa !9
  %331 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %330, i32 0, i32 0
  %332 = getelementptr inbounds [4 x i8], ptr %331, i64 0, i64 2
  %333 = load i8, ptr %332, align 1, !tbaa !13
  %334 = zext i8 %333 to i32
  %335 = load i32, ptr %21, align 4, !tbaa !5
  %336 = icmp ugt i32 %334, %335
  br i1 %336, label %337, label %343

337:                                              ; preds = %329
  %338 = load ptr, ptr %26, align 8, !tbaa !9
  %339 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %338, i32 0, i32 0
  %340 = getelementptr inbounds [4 x i8], ptr %339, i64 0, i64 2
  %341 = load i8, ptr %340, align 1, !tbaa !13
  %342 = zext i8 %341 to i32
  store i32 %342, ptr %21, align 4, !tbaa !5
  br label %343

343:                                              ; preds = %337, %329
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %344

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

347:                                              ; preds = %254
  store i32 255, ptr %18, align 4, !tbaa !5
  store i32 255, ptr %22, align 4, !tbaa !5
  br label %348

348:                                              ; preds = %347, %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %349 = load i32, ptr %15, align 4, !tbaa !5
  %350 = load i32, ptr %16, align 4, !tbaa !5
  %351 = load i32, ptr %17, align 4, !tbaa !5
  %352 = load i32, ptr %18, align 4, !tbaa !5
  %353 = call noundef ptr @_ZN6basisuL17color_quad_u8_setEPN6basist13color_quad_u8Eiiii(ptr noundef %27, i32 noundef %349, i32 noundef %350, i32 noundef %351, i32 noundef %352)
  %354 = load i32, ptr %19, align 4, !tbaa !5
  %355 = load i32, ptr %20, align 4, !tbaa !5
  %356 = load i32, ptr %21, align 4, !tbaa !5
  %357 = load i32, ptr %22, align 4, !tbaa !5
  %358 = call noundef ptr @_ZN6basisuL17color_quad_u8_setEPN6basist13color_quad_u8Eiiii(ptr noundef %28, i32 noundef %354, i32 noundef %355, i32 noundef %356, i32 noundef %357)
  call void @llvm.lifetime.start.p0(i64 128, ptr %29) #6
  %359 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %359, ptr align 1 %27, i64 4, i1 false), !tbaa.struct !17
  %360 = load i32, ptr %8, align 4, !tbaa !5
  %361 = sub i32 %360, 1
  %362 = zext i32 %361 to i64
  %363 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %362
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %363, ptr align 1 %28, i64 4, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 1, ptr %30, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %459, %348
  %365 = load i32, ptr %30, align 4, !tbaa !5
  %366 = load i32, ptr %8, align 4, !tbaa !5
  %367 = sub i32 %366, 1
  %368 = icmp ult i32 %365, %367
  br i1 %368, label %370, label %369

369:                                              ; preds = %364
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %462

370:                                              ; preds = %364
  %371 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %372 = getelementptr inbounds [4 x i8], ptr %371, i64 0, i64 0
  %373 = load i8, ptr %372, align 1, !tbaa !13
  %374 = zext i8 %373 to i32
  %375 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %376 = getelementptr inbounds [4 x i8], ptr %375, i64 0, i64 0
  %377 = load i8, ptr %376, align 1, !tbaa !13
  %378 = zext i8 %377 to i32
  %379 = load ptr, ptr %10, align 8, !tbaa !9
  %380 = load i32, ptr %30, align 4, !tbaa !5
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds i32, ptr %379, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !5
  %384 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %374, i32 noundef %378, i32 noundef %383)
  %385 = trunc i32 %384 to i8
  %386 = load i32, ptr %30, align 4, !tbaa !5
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %387
  %389 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %388, i32 0, i32 0
  %390 = getelementptr inbounds [4 x i8], ptr %389, i64 0, i64 0
  store i8 %385, ptr %390, align 4, !tbaa !13
  %391 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %392 = getelementptr inbounds [4 x i8], ptr %391, i64 0, i64 1
  %393 = load i8, ptr %392, align 1, !tbaa !13
  %394 = zext i8 %393 to i32
  %395 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %396 = getelementptr inbounds [4 x i8], ptr %395, i64 0, i64 1
  %397 = load i8, ptr %396, align 1, !tbaa !13
  %398 = zext i8 %397 to i32
  %399 = load ptr, ptr %10, align 8, !tbaa !9
  %400 = load i32, ptr %30, align 4, !tbaa !5
  %401 = zext i32 %400 to i64
  %402 = getelementptr inbounds i32, ptr %399, i64 %401
  %403 = load i32, ptr %402, align 4, !tbaa !5
  %404 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %394, i32 noundef %398, i32 noundef %403)
  %405 = trunc i32 %404 to i8
  %406 = load i32, ptr %30, align 4, !tbaa !5
  %407 = zext i32 %406 to i64
  %408 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %407
  %409 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %408, i32 0, i32 0
  %410 = getelementptr inbounds [4 x i8], ptr %409, i64 0, i64 1
  store i8 %405, ptr %410, align 1, !tbaa !13
  %411 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %412 = getelementptr inbounds [4 x i8], ptr %411, i64 0, i64 2
  %413 = load i8, ptr %412, align 1, !tbaa !13
  %414 = zext i8 %413 to i32
  %415 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %416 = getelementptr inbounds [4 x i8], ptr %415, i64 0, i64 2
  %417 = load i8, ptr %416, align 1, !tbaa !13
  %418 = zext i8 %417 to i32
  %419 = load ptr, ptr %10, align 8, !tbaa !9
  %420 = load i32, ptr %30, align 4, !tbaa !5
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !5
  %424 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %414, i32 noundef %418, i32 noundef %423)
  %425 = trunc i32 %424 to i8
  %426 = load i32, ptr %30, align 4, !tbaa !5
  %427 = zext i32 %426 to i64
  %428 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %427
  %429 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %428, i32 0, i32 0
  %430 = getelementptr inbounds [4 x i8], ptr %429, i64 0, i64 2
  store i8 %425, ptr %430, align 2, !tbaa !13
  %431 = load i32, ptr %9, align 4, !tbaa !5
  %432 = icmp eq i32 %431, 4
  br i1 %432, label %433, label %450

433:                                              ; preds = %370
  %434 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %435 = getelementptr inbounds [4 x i8], ptr %434, i64 0, i64 3
  %436 = load i8, ptr %435, align 1, !tbaa !13
  %437 = zext i8 %436 to i32
  %438 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %439 = getelementptr inbounds [4 x i8], ptr %438, i64 0, i64 3
  %440 = load i8, ptr %439, align 1, !tbaa !13
  %441 = zext i8 %440 to i32
  %442 = load ptr, ptr %10, align 8, !tbaa !9
  %443 = load i32, ptr %30, align 4, !tbaa !5
  %444 = zext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %442, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !5
  %447 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %437, i32 noundef %441, i32 noundef %446)
  %448 = trunc i32 %447 to i8
  %449 = zext i8 %448 to i32
  br label %451

450:                                              ; preds = %370
  br label %451

451:                                              ; preds = %450, %433
  %452 = phi i32 [ %449, %433 ], [ 255, %450 ]
  %453 = trunc i32 %452 to i8
  %454 = load i32, ptr %30, align 4, !tbaa !5
  %455 = zext i32 %454 to i64
  %456 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %455
  %457 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %456, i32 0, i32 0
  %458 = getelementptr inbounds [4 x i8], ptr %457, i64 0, i64 3
  store i8 %453, ptr %458, align 1, !tbaa !13
  br label %459

459:                                              ; preds = %451
  %460 = load i32, ptr %30, align 4, !tbaa !5
  %461 = add i32 %460, 1
  store i32 %461, ptr %30, align 4, !tbaa !5
  br label %364, !llvm.loop !18

462:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %463 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %464 = getelementptr inbounds [4 x i8], ptr %463, i64 0, i64 0
  %465 = load i8, ptr %464, align 1, !tbaa !13
  %466 = zext i8 %465 to i32
  %467 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %468 = getelementptr inbounds [4 x i8], ptr %467, i64 0, i64 0
  %469 = load i8, ptr %468, align 1, !tbaa !13
  %470 = zext i8 %469 to i32
  %471 = sub nsw i32 %466, %470
  store i32 %471, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %472 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %473 = getelementptr inbounds [4 x i8], ptr %472, i64 0, i64 1
  %474 = load i8, ptr %473, align 1, !tbaa !13
  %475 = zext i8 %474 to i32
  %476 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %477 = getelementptr inbounds [4 x i8], ptr %476, i64 0, i64 1
  %478 = load i8, ptr %477, align 1, !tbaa !13
  %479 = zext i8 %478 to i32
  %480 = sub nsw i32 %475, %479
  store i32 %480, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %481 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %482 = getelementptr inbounds [4 x i8], ptr %481, i64 0, i64 2
  %483 = load i8, ptr %482, align 1, !tbaa !13
  %484 = zext i8 %483 to i32
  %485 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %486 = getelementptr inbounds [4 x i8], ptr %485, i64 0, i64 2
  %487 = load i8, ptr %486, align 1, !tbaa !13
  %488 = zext i8 %487 to i32
  %489 = sub nsw i32 %484, %488
  store i32 %489, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %490 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %28, i32 0, i32 0
  %491 = getelementptr inbounds [4 x i8], ptr %490, i64 0, i64 3
  %492 = load i8, ptr %491, align 1, !tbaa !13
  %493 = zext i8 %492 to i32
  %494 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %27, i32 0, i32 0
  %495 = getelementptr inbounds [4 x i8], ptr %494, i64 0, i64 3
  %496 = load i8, ptr %495, align 1, !tbaa !13
  %497 = zext i8 %496 to i32
  %498 = sub nsw i32 %493, %497
  store i32 %498, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %35) #6
  %499 = load i32, ptr %9, align 4, !tbaa !5
  %500 = icmp eq i32 %499, 4
  br i1 %500, label %501, label %554

501:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %502

502:                                              ; preds = %550, %501
  %503 = load i32, ptr %36, align 4, !tbaa !5
  %504 = load i32, ptr %8, align 4, !tbaa !5
  %505 = icmp ult i32 %503, %504
  br i1 %505, label %507, label %506

506:                                              ; preds = %502
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %553

507:                                              ; preds = %502
  %508 = load i32, ptr %36, align 4, !tbaa !5
  %509 = zext i32 %508 to i64
  %510 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %509
  %511 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %510, i32 0, i32 0
  %512 = getelementptr inbounds [4 x i8], ptr %511, i64 0, i64 0
  %513 = load i8, ptr %512, align 4, !tbaa !13
  %514 = zext i8 %513 to i32
  %515 = load i32, ptr %31, align 4, !tbaa !5
  %516 = mul nsw i32 %514, %515
  %517 = load i32, ptr %36, align 4, !tbaa !5
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %518
  %520 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %519, i32 0, i32 0
  %521 = getelementptr inbounds [4 x i8], ptr %520, i64 0, i64 1
  %522 = load i8, ptr %521, align 1, !tbaa !13
  %523 = zext i8 %522 to i32
  %524 = load i32, ptr %32, align 4, !tbaa !5
  %525 = mul nsw i32 %523, %524
  %526 = add nsw i32 %516, %525
  %527 = load i32, ptr %36, align 4, !tbaa !5
  %528 = zext i32 %527 to i64
  %529 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %528
  %530 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %529, i32 0, i32 0
  %531 = getelementptr inbounds [4 x i8], ptr %530, i64 0, i64 2
  %532 = load i8, ptr %531, align 2, !tbaa !13
  %533 = zext i8 %532 to i32
  %534 = load i32, ptr %33, align 4, !tbaa !5
  %535 = mul nsw i32 %533, %534
  %536 = add nsw i32 %526, %535
  %537 = load i32, ptr %36, align 4, !tbaa !5
  %538 = zext i32 %537 to i64
  %539 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %538
  %540 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %539, i32 0, i32 0
  %541 = getelementptr inbounds [4 x i8], ptr %540, i64 0, i64 3
  %542 = load i8, ptr %541, align 1, !tbaa !13
  %543 = zext i8 %542 to i32
  %544 = load i32, ptr %34, align 4, !tbaa !5
  %545 = mul nsw i32 %543, %544
  %546 = add nsw i32 %536, %545
  %547 = load i32, ptr %36, align 4, !tbaa !5
  %548 = zext i32 %547 to i64
  %549 = getelementptr inbounds [32 x i32], ptr %35, i64 0, i64 %548
  store i32 %546, ptr %549, align 4, !tbaa !5
  br label %550

550:                                              ; preds = %507
  %551 = load i32, ptr %36, align 4, !tbaa !5
  %552 = add i32 %551, 1
  store i32 %552, ptr %36, align 4, !tbaa !5
  br label %502, !llvm.loop !19

553:                                              ; preds = %506
  br label %603

554:                                              ; preds = %462
  %555 = load i32, ptr %34, align 4, !tbaa !5
  %556 = icmp eq i32 %555, 0
  br i1 %556, label %557, label %558

557:                                              ; preds = %554
  br label %560

558:                                              ; preds = %554
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.3, i32 noundef 1837, ptr noundef @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

559:                                              ; No predecessors!
  br label %560

560:                                              ; preds = %559, %557
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %561

561:                                              ; preds = %599, %560
  %562 = load i32, ptr %37, align 4, !tbaa !5
  %563 = load i32, ptr %8, align 4, !tbaa !5
  %564 = icmp ult i32 %562, %563
  br i1 %564, label %566, label %565

565:                                              ; preds = %561
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %602

566:                                              ; preds = %561
  %567 = load i32, ptr %37, align 4, !tbaa !5
  %568 = zext i32 %567 to i64
  %569 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %568
  %570 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %569, i32 0, i32 0
  %571 = getelementptr inbounds [4 x i8], ptr %570, i64 0, i64 0
  %572 = load i8, ptr %571, align 4, !tbaa !13
  %573 = zext i8 %572 to i32
  %574 = load i32, ptr %31, align 4, !tbaa !5
  %575 = mul nsw i32 %573, %574
  %576 = load i32, ptr %37, align 4, !tbaa !5
  %577 = zext i32 %576 to i64
  %578 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %577
  %579 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %578, i32 0, i32 0
  %580 = getelementptr inbounds [4 x i8], ptr %579, i64 0, i64 1
  %581 = load i8, ptr %580, align 1, !tbaa !13
  %582 = zext i8 %581 to i32
  %583 = load i32, ptr %32, align 4, !tbaa !5
  %584 = mul nsw i32 %582, %583
  %585 = add nsw i32 %575, %584
  %586 = load i32, ptr %37, align 4, !tbaa !5
  %587 = zext i32 %586 to i64
  %588 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %587
  %589 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %588, i32 0, i32 0
  %590 = getelementptr inbounds [4 x i8], ptr %589, i64 0, i64 2
  %591 = load i8, ptr %590, align 2, !tbaa !13
  %592 = zext i8 %591 to i32
  %593 = load i32, ptr %33, align 4, !tbaa !5
  %594 = mul nsw i32 %592, %593
  %595 = add nsw i32 %585, %594
  %596 = load i32, ptr %37, align 4, !tbaa !5
  %597 = zext i32 %596 to i64
  %598 = getelementptr inbounds [32 x i32], ptr %35, i64 0, i64 %597
  store i32 %595, ptr %598, align 4, !tbaa !5
  br label %599

599:                                              ; preds = %566
  %600 = load i32, ptr %37, align 4, !tbaa !5
  %601 = add i32 %600, 1
  store i32 %601, ptr %37, align 4, !tbaa !5
  br label %561, !llvm.loop !20

602:                                              ; preds = %565
  br label %603

603:                                              ; preds = %602, %553
  call void @llvm.lifetime.start.p0(i64 124, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  store i32 0, ptr %39, align 4, !tbaa !5
  br label %604

604:                                              ; preds = %626, %603
  %605 = load i32, ptr %39, align 4, !tbaa !5
  %606 = load i32, ptr %8, align 4, !tbaa !5
  %607 = sub i32 %606, 1
  %608 = icmp ult i32 %605, %607
  br i1 %608, label %610, label %609

609:                                              ; preds = %604
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %629

610:                                              ; preds = %604
  %611 = load i32, ptr %39, align 4, !tbaa !5
  %612 = zext i32 %611 to i64
  %613 = getelementptr inbounds [32 x i32], ptr %35, i64 0, i64 %612
  %614 = load i32, ptr %613, align 4, !tbaa !5
  %615 = load i32, ptr %39, align 4, !tbaa !5
  %616 = add i32 %615, 1
  %617 = zext i32 %616 to i64
  %618 = getelementptr inbounds [32 x i32], ptr %35, i64 0, i64 %617
  %619 = load i32, ptr %618, align 4, !tbaa !5
  %620 = add nsw i32 %614, %619
  %621 = add nsw i32 %620, 1
  %622 = ashr i32 %621, 1
  %623 = load i32, ptr %39, align 4, !tbaa !5
  %624 = zext i32 %623 to i64
  %625 = getelementptr inbounds [31 x i32], ptr %38, i64 0, i64 %624
  store i32 %622, ptr %625, align 4, !tbaa !5
  br label %626

626:                                              ; preds = %610
  %627 = load i32, ptr %39, align 4, !tbaa !5
  %628 = add i32 %627, 1
  store i32 %628, ptr %39, align 4, !tbaa !5
  br label %604, !llvm.loop !21

629:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  store i64 0, ptr %40, align 8, !tbaa !11
  %630 = load ptr, ptr %14, align 8, !tbaa !9
  %631 = getelementptr inbounds i32, ptr %630, i64 0
  %632 = load i32, ptr %631, align 4, !tbaa !5
  %633 = load ptr, ptr %14, align 8, !tbaa !9
  %634 = getelementptr inbounds i32, ptr %633, i64 1
  %635 = load i32, ptr %634, align 4, !tbaa !5
  %636 = or i32 %632, %635
  %637 = load ptr, ptr %14, align 8, !tbaa !9
  %638 = getelementptr inbounds i32, ptr %637, i64 2
  %639 = load i32, ptr %638, align 4, !tbaa !5
  %640 = or i32 %636, %639
  %641 = load ptr, ptr %14, align 8, !tbaa !9
  %642 = getelementptr inbounds i32, ptr %641, i64 3
  %643 = load i32, ptr %642, align 4, !tbaa !5
  %644 = or i32 %640, %643
  %645 = icmp eq i32 %644, 1
  br i1 %645, label %646, label %911

646:                                              ; preds = %629
  %647 = load i32, ptr %9, align 4, !tbaa !5
  %648 = icmp eq i32 %647, 4
  br i1 %648, label %649, label %791

649:                                              ; preds = %646
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %650

650:                                              ; preds = %786, %649
  %651 = load i32, ptr %41, align 4, !tbaa !5
  %652 = load i32, ptr %11, align 4, !tbaa !5
  %653 = icmp ult i32 %651, %652
  br i1 %653, label %655, label %654

654:                                              ; preds = %650
  store i32 20, ptr %42, align 4
  br label %789

655:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %656 = load ptr, ptr %12, align 8, !tbaa !9
  %657 = load i32, ptr %41, align 4, !tbaa !5
  %658 = zext i32 %657 to i64
  %659 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %656, i64 %658
  store ptr %659, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %660 = load i32, ptr %31, align 4, !tbaa !5
  %661 = load ptr, ptr %43, align 8, !tbaa !9
  %662 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %661, i32 0, i32 0
  %663 = getelementptr inbounds [4 x i8], ptr %662, i64 0, i64 0
  %664 = load i8, ptr %663, align 1, !tbaa !13
  %665 = zext i8 %664 to i32
  %666 = mul nsw i32 %660, %665
  %667 = load i32, ptr %32, align 4, !tbaa !5
  %668 = load ptr, ptr %43, align 8, !tbaa !9
  %669 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %668, i32 0, i32 0
  %670 = getelementptr inbounds [4 x i8], ptr %669, i64 0, i64 1
  %671 = load i8, ptr %670, align 1, !tbaa !13
  %672 = zext i8 %671 to i32
  %673 = mul nsw i32 %667, %672
  %674 = add nsw i32 %666, %673
  %675 = load i32, ptr %33, align 4, !tbaa !5
  %676 = load ptr, ptr %43, align 8, !tbaa !9
  %677 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %676, i32 0, i32 0
  %678 = getelementptr inbounds [4 x i8], ptr %677, i64 0, i64 2
  %679 = load i8, ptr %678, align 1, !tbaa !13
  %680 = zext i8 %679 to i32
  %681 = mul nsw i32 %675, %680
  %682 = add nsw i32 %674, %681
  %683 = load i32, ptr %34, align 4, !tbaa !5
  %684 = load ptr, ptr %43, align 8, !tbaa !9
  %685 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %684, i32 0, i32 0
  %686 = getelementptr inbounds [4 x i8], ptr %685, i64 0, i64 3
  %687 = load i8, ptr %686, align 1, !tbaa !13
  %688 = zext i8 %687 to i32
  %689 = mul nsw i32 %683, %688
  %690 = add nsw i32 %682, %689
  store i32 %690, ptr %44, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  store i32 0, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  %691 = load i32, ptr %8, align 4, !tbaa !5
  %692 = sub i32 %691, 2
  store i32 %692, ptr %46, align 4, !tbaa !5
  br label %693

693:                                              ; preds = %708, %655
  %694 = load i32, ptr %46, align 4, !tbaa !5
  %695 = icmp sge i32 %694, 0
  br i1 %695, label %697, label %696

696:                                              ; preds = %693
  store i32 23, ptr %42, align 4
  br label %711

697:                                              ; preds = %693
  %698 = load i32, ptr %44, align 4, !tbaa !5
  %699 = load i32, ptr %46, align 4, !tbaa !5
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds [31 x i32], ptr %38, i64 0, i64 %700
  %702 = load i32, ptr %701, align 4, !tbaa !5
  %703 = icmp sge i32 %698, %702
  br i1 %703, label %704, label %707

704:                                              ; preds = %697
  %705 = load i32, ptr %46, align 4, !tbaa !5
  %706 = add nsw i32 %705, 1
  store i32 %706, ptr %45, align 4, !tbaa !5
  store i32 23, ptr %42, align 4
  br label %711

707:                                              ; preds = %697
  br label %708

708:                                              ; preds = %707
  %709 = load i32, ptr %46, align 4, !tbaa !5
  %710 = add nsw i32 %709, -1
  store i32 %710, ptr %46, align 4, !tbaa !5
  br label %693, !llvm.loop !22

711:                                              ; preds = %704, %696
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %712

712:                                              ; preds = %711
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %713 = load i32, ptr %45, align 4, !tbaa !5
  %714 = zext i32 %713 to i64
  %715 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %714
  store ptr %715, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  %716 = load ptr, ptr %47, align 8, !tbaa !9
  %717 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %716, i32 0, i32 0
  %718 = getelementptr inbounds [4 x i8], ptr %717, i64 0, i64 0
  %719 = load i8, ptr %718, align 1, !tbaa !13
  %720 = zext i8 %719 to i32
  %721 = load ptr, ptr %43, align 8, !tbaa !9
  %722 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %721, i32 0, i32 0
  %723 = getelementptr inbounds [4 x i8], ptr %722, i64 0, i64 0
  %724 = load i8, ptr %723, align 1, !tbaa !13
  %725 = zext i8 %724 to i32
  %726 = sub nsw i32 %720, %725
  store i32 %726, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %727 = load ptr, ptr %47, align 8, !tbaa !9
  %728 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %727, i32 0, i32 0
  %729 = getelementptr inbounds [4 x i8], ptr %728, i64 0, i64 1
  %730 = load i8, ptr %729, align 1, !tbaa !13
  %731 = zext i8 %730 to i32
  %732 = load ptr, ptr %43, align 8, !tbaa !9
  %733 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %732, i32 0, i32 0
  %734 = getelementptr inbounds [4 x i8], ptr %733, i64 0, i64 1
  %735 = load i8, ptr %734, align 1, !tbaa !13
  %736 = zext i8 %735 to i32
  %737 = sub nsw i32 %731, %736
  store i32 %737, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %738 = load ptr, ptr %47, align 8, !tbaa !9
  %739 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds [4 x i8], ptr %739, i64 0, i64 2
  %741 = load i8, ptr %740, align 1, !tbaa !13
  %742 = zext i8 %741 to i32
  %743 = load ptr, ptr %43, align 8, !tbaa !9
  %744 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %743, i32 0, i32 0
  %745 = getelementptr inbounds [4 x i8], ptr %744, i64 0, i64 2
  %746 = load i8, ptr %745, align 1, !tbaa !13
  %747 = zext i8 %746 to i32
  %748 = sub nsw i32 %742, %747
  store i32 %748, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  %749 = load ptr, ptr %47, align 8, !tbaa !9
  %750 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %749, i32 0, i32 0
  %751 = getelementptr inbounds [4 x i8], ptr %750, i64 0, i64 3
  %752 = load i8, ptr %751, align 1, !tbaa !13
  %753 = zext i8 %752 to i32
  %754 = load ptr, ptr %43, align 8, !tbaa !9
  %755 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %754, i32 0, i32 0
  %756 = getelementptr inbounds [4 x i8], ptr %755, i64 0, i64 3
  %757 = load i8, ptr %756, align 1, !tbaa !13
  %758 = zext i8 %757 to i32
  %759 = sub nsw i32 %753, %758
  store i32 %759, ptr %51, align 4, !tbaa !5
  %760 = load i32, ptr %48, align 4, !tbaa !5
  %761 = load i32, ptr %48, align 4, !tbaa !5
  %762 = mul nsw i32 %760, %761
  %763 = load i32, ptr %49, align 4, !tbaa !5
  %764 = load i32, ptr %49, align 4, !tbaa !5
  %765 = mul nsw i32 %763, %764
  %766 = add nsw i32 %762, %765
  %767 = load i32, ptr %50, align 4, !tbaa !5
  %768 = load i32, ptr %50, align 4, !tbaa !5
  %769 = mul nsw i32 %767, %768
  %770 = add nsw i32 %766, %769
  %771 = load i32, ptr %51, align 4, !tbaa !5
  %772 = load i32, ptr %51, align 4, !tbaa !5
  %773 = mul nsw i32 %771, %772
  %774 = add nsw i32 %770, %773
  %775 = sext i32 %774 to i64
  %776 = load i64, ptr %40, align 8, !tbaa !11
  %777 = add i64 %776, %775
  store i64 %777, ptr %40, align 8, !tbaa !11
  %778 = load i64, ptr %40, align 8, !tbaa !11
  %779 = load i64, ptr %13, align 8, !tbaa !11
  %780 = icmp ugt i64 %778, %779
  br i1 %780, label %781, label %782

781:                                              ; preds = %712
  store i32 20, ptr %42, align 4
  br label %783

782:                                              ; preds = %712
  store i32 0, ptr %42, align 4
  br label %783

783:                                              ; preds = %782, %781
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  %784 = load i32, ptr %42, align 4
  switch i32 %784, label %789 [
    i32 0, label %785
  ]

785:                                              ; preds = %783
  br label %786

786:                                              ; preds = %785
  %787 = load i32, ptr %41, align 4, !tbaa !5
  %788 = add i32 %787, 1
  store i32 %788, ptr %41, align 4, !tbaa !5
  br label %650, !llvm.loop !23

789:                                              ; preds = %783, %654
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  br label %790

790:                                              ; preds = %789
  br label %910

791:                                              ; preds = %646
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  store i32 0, ptr %52, align 4, !tbaa !5
  br label %792

792:                                              ; preds = %905, %791
  %793 = load i32, ptr %52, align 4, !tbaa !5
  %794 = load i32, ptr %11, align 4, !tbaa !5
  %795 = icmp ult i32 %793, %794
  br i1 %795, label %797, label %796

796:                                              ; preds = %792
  store i32 26, ptr %42, align 4
  br label %908

797:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %798 = load ptr, ptr %12, align 8, !tbaa !9
  %799 = load i32, ptr %52, align 4, !tbaa !5
  %800 = zext i32 %799 to i64
  %801 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %798, i64 %800
  store ptr %801, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  %802 = load i32, ptr %31, align 4, !tbaa !5
  %803 = load ptr, ptr %53, align 8, !tbaa !9
  %804 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %803, i32 0, i32 0
  %805 = getelementptr inbounds [4 x i8], ptr %804, i64 0, i64 0
  %806 = load i8, ptr %805, align 1, !tbaa !13
  %807 = zext i8 %806 to i32
  %808 = mul nsw i32 %802, %807
  %809 = load i32, ptr %32, align 4, !tbaa !5
  %810 = load ptr, ptr %53, align 8, !tbaa !9
  %811 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %810, i32 0, i32 0
  %812 = getelementptr inbounds [4 x i8], ptr %811, i64 0, i64 1
  %813 = load i8, ptr %812, align 1, !tbaa !13
  %814 = zext i8 %813 to i32
  %815 = mul nsw i32 %809, %814
  %816 = add nsw i32 %808, %815
  %817 = load i32, ptr %33, align 4, !tbaa !5
  %818 = load ptr, ptr %53, align 8, !tbaa !9
  %819 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %818, i32 0, i32 0
  %820 = getelementptr inbounds [4 x i8], ptr %819, i64 0, i64 2
  %821 = load i8, ptr %820, align 1, !tbaa !13
  %822 = zext i8 %821 to i32
  %823 = mul nsw i32 %817, %822
  %824 = add nsw i32 %816, %823
  store i32 %824, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  store i32 0, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  %825 = load i32, ptr %8, align 4, !tbaa !5
  %826 = sub i32 %825, 2
  store i32 %826, ptr %56, align 4, !tbaa !5
  br label %827

827:                                              ; preds = %842, %797
  %828 = load i32, ptr %56, align 4, !tbaa !5
  %829 = icmp sge i32 %828, 0
  br i1 %829, label %831, label %830

830:                                              ; preds = %827
  store i32 29, ptr %42, align 4
  br label %845

831:                                              ; preds = %827
  %832 = load i32, ptr %54, align 4, !tbaa !5
  %833 = load i32, ptr %56, align 4, !tbaa !5
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds [31 x i32], ptr %38, i64 0, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !5
  %837 = icmp sge i32 %832, %836
  br i1 %837, label %838, label %841

838:                                              ; preds = %831
  %839 = load i32, ptr %56, align 4, !tbaa !5
  %840 = add nsw i32 %839, 1
  store i32 %840, ptr %55, align 4, !tbaa !5
  store i32 29, ptr %42, align 4
  br label %845

841:                                              ; preds = %831
  br label %842

842:                                              ; preds = %841
  %843 = load i32, ptr %56, align 4, !tbaa !5
  %844 = add nsw i32 %843, -1
  store i32 %844, ptr %56, align 4, !tbaa !5
  br label %827, !llvm.loop !24

845:                                              ; preds = %838, %830
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  br label %846

846:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %847 = load i32, ptr %55, align 4, !tbaa !5
  %848 = zext i32 %847 to i64
  %849 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %848
  store ptr %849, ptr %57, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %850 = load ptr, ptr %57, align 8, !tbaa !9
  %851 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %850, i32 0, i32 0
  %852 = getelementptr inbounds [4 x i8], ptr %851, i64 0, i64 0
  %853 = load i8, ptr %852, align 1, !tbaa !13
  %854 = zext i8 %853 to i32
  %855 = load ptr, ptr %53, align 8, !tbaa !9
  %856 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %855, i32 0, i32 0
  %857 = getelementptr inbounds [4 x i8], ptr %856, i64 0, i64 0
  %858 = load i8, ptr %857, align 1, !tbaa !13
  %859 = zext i8 %858 to i32
  %860 = sub nsw i32 %854, %859
  store i32 %860, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %861 = load ptr, ptr %57, align 8, !tbaa !9
  %862 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %861, i32 0, i32 0
  %863 = getelementptr inbounds [4 x i8], ptr %862, i64 0, i64 1
  %864 = load i8, ptr %863, align 1, !tbaa !13
  %865 = zext i8 %864 to i32
  %866 = load ptr, ptr %53, align 8, !tbaa !9
  %867 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %866, i32 0, i32 0
  %868 = getelementptr inbounds [4 x i8], ptr %867, i64 0, i64 1
  %869 = load i8, ptr %868, align 1, !tbaa !13
  %870 = zext i8 %869 to i32
  %871 = sub nsw i32 %865, %870
  store i32 %871, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %872 = load ptr, ptr %57, align 8, !tbaa !9
  %873 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %872, i32 0, i32 0
  %874 = getelementptr inbounds [4 x i8], ptr %873, i64 0, i64 2
  %875 = load i8, ptr %874, align 1, !tbaa !13
  %876 = zext i8 %875 to i32
  %877 = load ptr, ptr %53, align 8, !tbaa !9
  %878 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %877, i32 0, i32 0
  %879 = getelementptr inbounds [4 x i8], ptr %878, i64 0, i64 2
  %880 = load i8, ptr %879, align 1, !tbaa !13
  %881 = zext i8 %880 to i32
  %882 = sub nsw i32 %876, %881
  store i32 %882, ptr %60, align 4, !tbaa !5
  %883 = load i32, ptr %58, align 4, !tbaa !5
  %884 = load i32, ptr %58, align 4, !tbaa !5
  %885 = mul nsw i32 %883, %884
  %886 = load i32, ptr %59, align 4, !tbaa !5
  %887 = load i32, ptr %59, align 4, !tbaa !5
  %888 = mul nsw i32 %886, %887
  %889 = add nsw i32 %885, %888
  %890 = load i32, ptr %60, align 4, !tbaa !5
  %891 = load i32, ptr %60, align 4, !tbaa !5
  %892 = mul nsw i32 %890, %891
  %893 = add nsw i32 %889, %892
  %894 = sext i32 %893 to i64
  %895 = load i64, ptr %40, align 8, !tbaa !11
  %896 = add i64 %895, %894
  store i64 %896, ptr %40, align 8, !tbaa !11
  %897 = load i64, ptr %40, align 8, !tbaa !11
  %898 = load i64, ptr %13, align 8, !tbaa !11
  %899 = icmp ugt i64 %897, %898
  br i1 %899, label %900, label %901

900:                                              ; preds = %846
  store i32 26, ptr %42, align 4
  br label %902

901:                                              ; preds = %846
  store i32 0, ptr %42, align 4
  br label %902

902:                                              ; preds = %901, %900
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  %903 = load i32, ptr %42, align 4
  switch i32 %903, label %908 [
    i32 0, label %904
  ]

904:                                              ; preds = %902
  br label %905

905:                                              ; preds = %904
  %906 = load i32, ptr %52, align 4, !tbaa !5
  %907 = add i32 %906, 1
  store i32 %907, ptr %52, align 4, !tbaa !5
  br label %792, !llvm.loop !25

908:                                              ; preds = %902, %796
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  br label %909

909:                                              ; preds = %908
  br label %910

910:                                              ; preds = %909, %790
  br label %1204

911:                                              ; preds = %629
  %912 = load i32, ptr %9, align 4, !tbaa !5
  %913 = icmp eq i32 %912, 4
  br i1 %913, label %914, label %1072

914:                                              ; preds = %911
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  store i32 0, ptr %61, align 4, !tbaa !5
  br label %915

915:                                              ; preds = %1067, %914
  %916 = load i32, ptr %61, align 4, !tbaa !5
  %917 = load i32, ptr %11, align 4, !tbaa !5
  %918 = icmp ult i32 %916, %917
  br i1 %918, label %920, label %919

919:                                              ; preds = %915
  store i32 32, ptr %42, align 4
  br label %1070

920:                                              ; preds = %915
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %921 = load ptr, ptr %12, align 8, !tbaa !9
  %922 = load i32, ptr %61, align 4, !tbaa !5
  %923 = zext i32 %922 to i64
  %924 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %921, i64 %923
  store ptr %924, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #6
  %925 = load i32, ptr %31, align 4, !tbaa !5
  %926 = load ptr, ptr %62, align 8, !tbaa !9
  %927 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %926, i32 0, i32 0
  %928 = getelementptr inbounds [4 x i8], ptr %927, i64 0, i64 0
  %929 = load i8, ptr %928, align 1, !tbaa !13
  %930 = zext i8 %929 to i32
  %931 = mul nsw i32 %925, %930
  %932 = load i32, ptr %32, align 4, !tbaa !5
  %933 = load ptr, ptr %62, align 8, !tbaa !9
  %934 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %933, i32 0, i32 0
  %935 = getelementptr inbounds [4 x i8], ptr %934, i64 0, i64 1
  %936 = load i8, ptr %935, align 1, !tbaa !13
  %937 = zext i8 %936 to i32
  %938 = mul nsw i32 %932, %937
  %939 = add nsw i32 %931, %938
  %940 = load i32, ptr %33, align 4, !tbaa !5
  %941 = load ptr, ptr %62, align 8, !tbaa !9
  %942 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %941, i32 0, i32 0
  %943 = getelementptr inbounds [4 x i8], ptr %942, i64 0, i64 2
  %944 = load i8, ptr %943, align 1, !tbaa !13
  %945 = zext i8 %944 to i32
  %946 = mul nsw i32 %940, %945
  %947 = add nsw i32 %939, %946
  %948 = load i32, ptr %34, align 4, !tbaa !5
  %949 = load ptr, ptr %62, align 8, !tbaa !9
  %950 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %949, i32 0, i32 0
  %951 = getelementptr inbounds [4 x i8], ptr %950, i64 0, i64 3
  %952 = load i8, ptr %951, align 1, !tbaa !13
  %953 = zext i8 %952 to i32
  %954 = mul nsw i32 %948, %953
  %955 = add nsw i32 %947, %954
  store i32 %955, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #6
  store i32 0, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #6
  %956 = load i32, ptr %8, align 4, !tbaa !5
  %957 = sub i32 %956, 2
  store i32 %957, ptr %65, align 4, !tbaa !5
  br label %958

958:                                              ; preds = %973, %920
  %959 = load i32, ptr %65, align 4, !tbaa !5
  %960 = icmp sge i32 %959, 0
  br i1 %960, label %962, label %961

961:                                              ; preds = %958
  store i32 35, ptr %42, align 4
  br label %976

962:                                              ; preds = %958
  %963 = load i32, ptr %63, align 4, !tbaa !5
  %964 = load i32, ptr %65, align 4, !tbaa !5
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds [31 x i32], ptr %38, i64 0, i64 %965
  %967 = load i32, ptr %966, align 4, !tbaa !5
  %968 = icmp sge i32 %963, %967
  br i1 %968, label %969, label %972

969:                                              ; preds = %962
  %970 = load i32, ptr %65, align 4, !tbaa !5
  %971 = add nsw i32 %970, 1
  store i32 %971, ptr %64, align 4, !tbaa !5
  store i32 35, ptr %42, align 4
  br label %976

972:                                              ; preds = %962
  br label %973

973:                                              ; preds = %972
  %974 = load i32, ptr %65, align 4, !tbaa !5
  %975 = add nsw i32 %974, -1
  store i32 %975, ptr %65, align 4, !tbaa !5
  br label %958, !llvm.loop !26

976:                                              ; preds = %969, %961
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  br label %977

977:                                              ; preds = %976
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  %978 = load i32, ptr %64, align 4, !tbaa !5
  %979 = zext i32 %978 to i64
  %980 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %979
  store ptr %980, ptr %66, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  %981 = load ptr, ptr %66, align 8, !tbaa !9
  %982 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %981, i32 0, i32 0
  %983 = getelementptr inbounds [4 x i8], ptr %982, i64 0, i64 0
  %984 = load i8, ptr %983, align 1, !tbaa !13
  %985 = zext i8 %984 to i32
  %986 = load ptr, ptr %62, align 8, !tbaa !9
  %987 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %986, i32 0, i32 0
  %988 = getelementptr inbounds [4 x i8], ptr %987, i64 0, i64 0
  %989 = load i8, ptr %988, align 1, !tbaa !13
  %990 = zext i8 %989 to i32
  %991 = sub nsw i32 %985, %990
  store i32 %991, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  %992 = load ptr, ptr %66, align 8, !tbaa !9
  %993 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %992, i32 0, i32 0
  %994 = getelementptr inbounds [4 x i8], ptr %993, i64 0, i64 1
  %995 = load i8, ptr %994, align 1, !tbaa !13
  %996 = zext i8 %995 to i32
  %997 = load ptr, ptr %62, align 8, !tbaa !9
  %998 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %997, i32 0, i32 0
  %999 = getelementptr inbounds [4 x i8], ptr %998, i64 0, i64 1
  %1000 = load i8, ptr %999, align 1, !tbaa !13
  %1001 = zext i8 %1000 to i32
  %1002 = sub nsw i32 %996, %1001
  store i32 %1002, ptr %68, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #6
  %1003 = load ptr, ptr %66, align 8, !tbaa !9
  %1004 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds [4 x i8], ptr %1004, i64 0, i64 2
  %1006 = load i8, ptr %1005, align 1, !tbaa !13
  %1007 = zext i8 %1006 to i32
  %1008 = load ptr, ptr %62, align 8, !tbaa !9
  %1009 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1008, i32 0, i32 0
  %1010 = getelementptr inbounds [4 x i8], ptr %1009, i64 0, i64 2
  %1011 = load i8, ptr %1010, align 1, !tbaa !13
  %1012 = zext i8 %1011 to i32
  %1013 = sub nsw i32 %1007, %1012
  store i32 %1013, ptr %69, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  %1014 = load ptr, ptr %66, align 8, !tbaa !9
  %1015 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1014, i32 0, i32 0
  %1016 = getelementptr inbounds [4 x i8], ptr %1015, i64 0, i64 3
  %1017 = load i8, ptr %1016, align 1, !tbaa !13
  %1018 = zext i8 %1017 to i32
  %1019 = load ptr, ptr %62, align 8, !tbaa !9
  %1020 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1019, i32 0, i32 0
  %1021 = getelementptr inbounds [4 x i8], ptr %1020, i64 0, i64 3
  %1022 = load i8, ptr %1021, align 1, !tbaa !13
  %1023 = zext i8 %1022 to i32
  %1024 = sub nsw i32 %1018, %1023
  store i32 %1024, ptr %70, align 4, !tbaa !5
  %1025 = load ptr, ptr %14, align 8, !tbaa !9
  %1026 = getelementptr inbounds i32, ptr %1025, i64 0
  %1027 = load i32, ptr %1026, align 4, !tbaa !5
  %1028 = load i32, ptr %67, align 4, !tbaa !5
  %1029 = load i32, ptr %67, align 4, !tbaa !5
  %1030 = mul nsw i32 %1028, %1029
  %1031 = mul i32 %1027, %1030
  %1032 = load ptr, ptr %14, align 8, !tbaa !9
  %1033 = getelementptr inbounds i32, ptr %1032, i64 1
  %1034 = load i32, ptr %1033, align 4, !tbaa !5
  %1035 = load i32, ptr %68, align 4, !tbaa !5
  %1036 = load i32, ptr %68, align 4, !tbaa !5
  %1037 = mul nsw i32 %1035, %1036
  %1038 = mul i32 %1034, %1037
  %1039 = add i32 %1031, %1038
  %1040 = load ptr, ptr %14, align 8, !tbaa !9
  %1041 = getelementptr inbounds i32, ptr %1040, i64 2
  %1042 = load i32, ptr %1041, align 4, !tbaa !5
  %1043 = load i32, ptr %69, align 4, !tbaa !5
  %1044 = load i32, ptr %69, align 4, !tbaa !5
  %1045 = mul nsw i32 %1043, %1044
  %1046 = mul i32 %1042, %1045
  %1047 = add i32 %1039, %1046
  %1048 = load ptr, ptr %14, align 8, !tbaa !9
  %1049 = getelementptr inbounds i32, ptr %1048, i64 3
  %1050 = load i32, ptr %1049, align 4, !tbaa !5
  %1051 = load i32, ptr %70, align 4, !tbaa !5
  %1052 = load i32, ptr %70, align 4, !tbaa !5
  %1053 = mul nsw i32 %1051, %1052
  %1054 = mul i32 %1050, %1053
  %1055 = add i32 %1047, %1054
  %1056 = zext i32 %1055 to i64
  %1057 = load i64, ptr %40, align 8, !tbaa !11
  %1058 = add i64 %1057, %1056
  store i64 %1058, ptr %40, align 8, !tbaa !11
  %1059 = load i64, ptr %40, align 8, !tbaa !11
  %1060 = load i64, ptr %13, align 8, !tbaa !11
  %1061 = icmp ugt i64 %1059, %1060
  br i1 %1061, label %1062, label %1063

1062:                                             ; preds = %977
  store i32 32, ptr %42, align 4
  br label %1064

1063:                                             ; preds = %977
  store i32 0, ptr %42, align 4
  br label %1064

1064:                                             ; preds = %1063, %1062
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  %1065 = load i32, ptr %42, align 4
  switch i32 %1065, label %1070 [
    i32 0, label %1066
  ]

1066:                                             ; preds = %1064
  br label %1067

1067:                                             ; preds = %1066
  %1068 = load i32, ptr %61, align 4, !tbaa !5
  %1069 = add i32 %1068, 1
  store i32 %1069, ptr %61, align 4, !tbaa !5
  br label %915, !llvm.loop !27

1070:                                             ; preds = %1064, %919
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  br label %1071

1071:                                             ; preds = %1070
  br label %1203

1072:                                             ; preds = %911
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #6
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %1073

1073:                                             ; preds = %1198, %1072
  %1074 = load i32, ptr %71, align 4, !tbaa !5
  %1075 = load i32, ptr %11, align 4, !tbaa !5
  %1076 = icmp ult i32 %1074, %1075
  br i1 %1076, label %1078, label %1077

1077:                                             ; preds = %1073
  store i32 38, ptr %42, align 4
  br label %1201

1078:                                             ; preds = %1073
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  %1079 = load ptr, ptr %12, align 8, !tbaa !9
  %1080 = load i32, ptr %71, align 4, !tbaa !5
  %1081 = zext i32 %1080 to i64
  %1082 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1079, i64 %1081
  store ptr %1082, ptr %72, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #6
  %1083 = load i32, ptr %31, align 4, !tbaa !5
  %1084 = load ptr, ptr %72, align 8, !tbaa !9
  %1085 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1084, i32 0, i32 0
  %1086 = getelementptr inbounds [4 x i8], ptr %1085, i64 0, i64 0
  %1087 = load i8, ptr %1086, align 1, !tbaa !13
  %1088 = zext i8 %1087 to i32
  %1089 = mul nsw i32 %1083, %1088
  %1090 = load i32, ptr %32, align 4, !tbaa !5
  %1091 = load ptr, ptr %72, align 8, !tbaa !9
  %1092 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1091, i32 0, i32 0
  %1093 = getelementptr inbounds [4 x i8], ptr %1092, i64 0, i64 1
  %1094 = load i8, ptr %1093, align 1, !tbaa !13
  %1095 = zext i8 %1094 to i32
  %1096 = mul nsw i32 %1090, %1095
  %1097 = add nsw i32 %1089, %1096
  %1098 = load i32, ptr %33, align 4, !tbaa !5
  %1099 = load ptr, ptr %72, align 8, !tbaa !9
  %1100 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1099, i32 0, i32 0
  %1101 = getelementptr inbounds [4 x i8], ptr %1100, i64 0, i64 2
  %1102 = load i8, ptr %1101, align 1, !tbaa !13
  %1103 = zext i8 %1102 to i32
  %1104 = mul nsw i32 %1098, %1103
  %1105 = add nsw i32 %1097, %1104
  store i32 %1105, ptr %73, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #6
  store i32 0, ptr %74, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #6
  %1106 = load i32, ptr %8, align 4, !tbaa !5
  %1107 = sub i32 %1106, 2
  store i32 %1107, ptr %75, align 4, !tbaa !5
  br label %1108

1108:                                             ; preds = %1123, %1078
  %1109 = load i32, ptr %75, align 4, !tbaa !5
  %1110 = icmp sge i32 %1109, 0
  br i1 %1110, label %1112, label %1111

1111:                                             ; preds = %1108
  store i32 41, ptr %42, align 4
  br label %1126

1112:                                             ; preds = %1108
  %1113 = load i32, ptr %73, align 4, !tbaa !5
  %1114 = load i32, ptr %75, align 4, !tbaa !5
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds [31 x i32], ptr %38, i64 0, i64 %1115
  %1117 = load i32, ptr %1116, align 4, !tbaa !5
  %1118 = icmp sge i32 %1113, %1117
  br i1 %1118, label %1119, label %1122

1119:                                             ; preds = %1112
  %1120 = load i32, ptr %75, align 4, !tbaa !5
  %1121 = add nsw i32 %1120, 1
  store i32 %1121, ptr %74, align 4, !tbaa !5
  store i32 41, ptr %42, align 4
  br label %1126

1122:                                             ; preds = %1112
  br label %1123

1123:                                             ; preds = %1122
  %1124 = load i32, ptr %75, align 4, !tbaa !5
  %1125 = add nsw i32 %1124, -1
  store i32 %1125, ptr %75, align 4, !tbaa !5
  br label %1108, !llvm.loop !28

1126:                                             ; preds = %1119, %1111
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #6
  br label %1127

1127:                                             ; preds = %1126
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #6
  %1128 = load i32, ptr %74, align 4, !tbaa !5
  %1129 = zext i32 %1128 to i64
  %1130 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %29, i64 0, i64 %1129
  store ptr %1130, ptr %76, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #6
  %1131 = load ptr, ptr %76, align 8, !tbaa !9
  %1132 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1131, i32 0, i32 0
  %1133 = getelementptr inbounds [4 x i8], ptr %1132, i64 0, i64 0
  %1134 = load i8, ptr %1133, align 1, !tbaa !13
  %1135 = zext i8 %1134 to i32
  %1136 = load ptr, ptr %72, align 8, !tbaa !9
  %1137 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1136, i32 0, i32 0
  %1138 = getelementptr inbounds [4 x i8], ptr %1137, i64 0, i64 0
  %1139 = load i8, ptr %1138, align 1, !tbaa !13
  %1140 = zext i8 %1139 to i32
  %1141 = sub nsw i32 %1135, %1140
  store i32 %1141, ptr %77, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #6
  %1142 = load ptr, ptr %76, align 8, !tbaa !9
  %1143 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1142, i32 0, i32 0
  %1144 = getelementptr inbounds [4 x i8], ptr %1143, i64 0, i64 1
  %1145 = load i8, ptr %1144, align 1, !tbaa !13
  %1146 = zext i8 %1145 to i32
  %1147 = load ptr, ptr %72, align 8, !tbaa !9
  %1148 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1147, i32 0, i32 0
  %1149 = getelementptr inbounds [4 x i8], ptr %1148, i64 0, i64 1
  %1150 = load i8, ptr %1149, align 1, !tbaa !13
  %1151 = zext i8 %1150 to i32
  %1152 = sub nsw i32 %1146, %1151
  store i32 %1152, ptr %78, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #6
  %1153 = load ptr, ptr %76, align 8, !tbaa !9
  %1154 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1153, i32 0, i32 0
  %1155 = getelementptr inbounds [4 x i8], ptr %1154, i64 0, i64 2
  %1156 = load i8, ptr %1155, align 1, !tbaa !13
  %1157 = zext i8 %1156 to i32
  %1158 = load ptr, ptr %72, align 8, !tbaa !9
  %1159 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %1158, i32 0, i32 0
  %1160 = getelementptr inbounds [4 x i8], ptr %1159, i64 0, i64 2
  %1161 = load i8, ptr %1160, align 1, !tbaa !13
  %1162 = zext i8 %1161 to i32
  %1163 = sub nsw i32 %1157, %1162
  store i32 %1163, ptr %79, align 4, !tbaa !5
  %1164 = load ptr, ptr %14, align 8, !tbaa !9
  %1165 = getelementptr inbounds i32, ptr %1164, i64 0
  %1166 = load i32, ptr %1165, align 4, !tbaa !5
  %1167 = load i32, ptr %77, align 4, !tbaa !5
  %1168 = load i32, ptr %77, align 4, !tbaa !5
  %1169 = mul nsw i32 %1167, %1168
  %1170 = mul i32 %1166, %1169
  %1171 = load ptr, ptr %14, align 8, !tbaa !9
  %1172 = getelementptr inbounds i32, ptr %1171, i64 1
  %1173 = load i32, ptr %1172, align 4, !tbaa !5
  %1174 = load i32, ptr %78, align 4, !tbaa !5
  %1175 = load i32, ptr %78, align 4, !tbaa !5
  %1176 = mul nsw i32 %1174, %1175
  %1177 = mul i32 %1173, %1176
  %1178 = add i32 %1170, %1177
  %1179 = load ptr, ptr %14, align 8, !tbaa !9
  %1180 = getelementptr inbounds i32, ptr %1179, i64 2
  %1181 = load i32, ptr %1180, align 4, !tbaa !5
  %1182 = load i32, ptr %79, align 4, !tbaa !5
  %1183 = load i32, ptr %79, align 4, !tbaa !5
  %1184 = mul nsw i32 %1182, %1183
  %1185 = mul i32 %1181, %1184
  %1186 = add i32 %1178, %1185
  %1187 = zext i32 %1186 to i64
  %1188 = load i64, ptr %40, align 8, !tbaa !11
  %1189 = add i64 %1188, %1187
  store i64 %1189, ptr %40, align 8, !tbaa !11
  %1190 = load i64, ptr %40, align 8, !tbaa !11
  %1191 = load i64, ptr %13, align 8, !tbaa !11
  %1192 = icmp ugt i64 %1190, %1191
  br i1 %1192, label %1193, label %1194

1193:                                             ; preds = %1127
  store i32 38, ptr %42, align 4
  br label %1195

1194:                                             ; preds = %1127
  store i32 0, ptr %42, align 4
  br label %1195

1195:                                             ; preds = %1194, %1193
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  %1196 = load i32, ptr %42, align 4
  switch i32 %1196, label %1201 [
    i32 0, label %1197
  ]

1197:                                             ; preds = %1195
  br label %1198

1198:                                             ; preds = %1197
  %1199 = load i32, ptr %71, align 4, !tbaa !5
  %1200 = add i32 %1199, 1
  store i32 %1200, ptr %71, align 4, !tbaa !5
  br label %1073, !llvm.loop !29

1201:                                             ; preds = %1195, %1077
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  br label %1202

1202:                                             ; preds = %1201
  br label %1203

1203:                                             ; preds = %1202, %1071
  br label %1204

1204:                                             ; preds = %1203, %910
  %1205 = load i64, ptr %40, align 8, !tbaa !11
  store i32 1, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 124, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  ret i64 %1205
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @_ZN6basisuL17color_quad_u8_setEPN6basist13color_quad_u8Eiiii(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind }
attributes #6 = { 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, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{i64 0, i64 4, !13}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!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 = distinct !{!28, !15}
!29 = distinct !{!29, !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::color_quad_u8" = type { [4 x i8] }

@.str.3 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_ = external hidden unnamed_addr constant [148 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef i64 @_ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_(i32 noundef %0, i32 noundef %1, ptr nocapture noundef readonly %2, i32 noundef %3, ptr nocapture noundef readonly %4, i64 noundef %5, ptr nocapture noundef readonly %6) local_unnamed_addr #3 {
  %8 = alloca %"struct.basist::color_quad_u8", align 4
  %9 = alloca %"struct.basist::color_quad_u8", align 4
  %10 = alloca [32 x %"struct.basist::color_quad_u8"], align 16
  %11 = alloca [32 x i32], align 16
  %12 = alloca [31 x i32], align 16
  %13 = icmp eq i32 %1, 4
  %14 = add i32 %1, -3
  %15 = icmp ult i32 %14, 2
  br i1 %15, label %17, label %16

16:                                               ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.3, i32 noundef 1766, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

17:                                               ; preds = %7
  %18 = add i32 %0, -1
  %19 = icmp ult i32 %18, 32
  br i1 %19, label %21, label %20

20:                                               ; preds = %17
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.3, i32 noundef 1767, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

21:                                               ; preds = %17
  %22 = load i32, ptr %2, align 4, !tbaa !5
  %23 = icmp eq i32 %22, 0
  br i1 %23, label %24, label %.critedge

24:                                               ; preds = %21
  %25 = zext nneg i32 %18 to i64
  %26 = getelementptr inbounds i32, ptr %2, i64 %25
  %27 = load i32, ptr %26, align 4, !tbaa !5
  %28 = icmp eq i32 %27, 64
  br i1 %28, label %29, label %.critedge

.critedge:                                        ; preds = %21, %24
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.3, i32 noundef 1768, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

29:                                               ; preds = %24
  %.not463 = icmp eq i32 %3, 0
  br i1 %13, label %.preheader378, label %.preheader380

.preheader380:                                    ; preds = %29
  br i1 %.not463, label %.loopexit379, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader380
  %wide.trip.count = zext i32 %3 to i64
  br label %.lr.ph

.preheader378:                                    ; preds = %29
  br i1 %.not463, label %.loopexit379, label %.lr.ph407.preheader

.lr.ph407.preheader:                              ; preds = %.preheader378
  %wide.trip.count487 = zext i32 %3 to i64
  br label %.lr.ph407

.lr.ph407:                                        ; preds = %.lr.ph407.preheader, %.lr.ph407
  %indvars.iv484 = phi i64 [ 0, %.lr.ph407.preheader ], [ %indvars.iv.next485, %.lr.ph407 ]
  %.0406 = phi i32 [ 255, %.lr.ph407.preheader ], [ %spec.select, %.lr.ph407 ]
  %.0279405 = phi i32 [ 255, %.lr.ph407.preheader ], [ %.1280, %.lr.ph407 ]
  %.0284404 = phi i32 [ 255, %.lr.ph407.preheader ], [ %.1285, %.lr.ph407 ]
  %.0289403 = phi i32 [ 255, %.lr.ph407.preheader ], [ %.1290, %.lr.ph407 ]
  %.0294402 = phi i32 [ 0, %.lr.ph407.preheader ], [ %.1295, %.lr.ph407 ]
  %.0299401 = phi i32 [ 0, %.lr.ph407.preheader ], [ %.1300, %.lr.ph407 ]
  %.0305400 = phi i32 [ 0, %.lr.ph407.preheader ], [ %.1306, %.lr.ph407 ]
  %.0310399 = phi i32 [ 0, %.lr.ph407.preheader ], [ %.1311, %.lr.ph407 ]
  %30 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %indvars.iv484
  %31 = load i8, ptr %30, align 1, !tbaa !9
  %32 = zext i8 %31 to i32
  %spec.select = tail call i32 @llvm.umin.i32(i32 %.0406, i32 %32)
  %33 = getelementptr inbounds i8, ptr %30, i64 1
  %34 = load i8, ptr %33, align 1, !tbaa !9
  %35 = zext i8 %34 to i32
  %.1280 = tail call i32 @llvm.umin.i32(i32 %.0279405, i32 %35)
  %36 = getelementptr inbounds i8, ptr %30, i64 2
  %37 = load i8, ptr %36, align 1, !tbaa !9
  %38 = zext i8 %37 to i32
  %.1285 = tail call i32 @llvm.umin.i32(i32 %.0284404, i32 %38)
  %39 = getelementptr inbounds i8, ptr %30, i64 3
  %40 = load i8, ptr %39, align 1, !tbaa !9
  %41 = zext i8 %40 to i32
  %.1290 = tail call i32 @llvm.umin.i32(i32 %.0289403, i32 %41)
  %.1295 = tail call i32 @llvm.umax.i32(i32 %.0294402, i32 %32)
  %.1300 = tail call i32 @llvm.umax.i32(i32 %.0299401, i32 %35)
  %.1306 = tail call i32 @llvm.umax.i32(i32 %.0305400, i32 %38)
  %.1311 = tail call i32 @llvm.umax.i32(i32 %.0310399, i32 %41)
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %exitcond488.not = icmp eq i64 %indvars.iv.next485, %wide.trip.count487
  br i1 %exitcond488.not, label %.loopexit379, label %.lr.ph407, !llvm.loop !10

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %.2392 = phi i32 [ 255, %.lr.ph.preheader ], [ %spec.select360, %.lr.ph ]
  %.2281391 = phi i32 [ 255, %.lr.ph.preheader ], [ %.3282, %.lr.ph ]
  %.2286390 = phi i32 [ 255, %.lr.ph.preheader ], [ %.3287, %.lr.ph ]
  %.2296389 = phi i32 [ 0, %.lr.ph.preheader ], [ %.3297, %.lr.ph ]
  %.2301388 = phi i32 [ 0, %.lr.ph.preheader ], [ %.3302, %.lr.ph ]
  %.2307387 = phi i32 [ 0, %.lr.ph.preheader ], [ %.3308, %.lr.ph ]
  %42 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %indvars.iv
  %43 = load i8, ptr %42, align 1, !tbaa !9
  %44 = zext i8 %43 to i32
  %spec.select360 = tail call i32 @llvm.umin.i32(i32 %.2392, i32 %44)
  %45 = getelementptr inbounds i8, ptr %42, i64 1
  %46 = load i8, ptr %45, align 1, !tbaa !9
  %47 = zext i8 %46 to i32
  %.3282 = tail call i32 @llvm.umin.i32(i32 %.2281391, i32 %47)
  %48 = getelementptr inbounds i8, ptr %42, i64 2
  %49 = load i8, ptr %48, align 1, !tbaa !9
  %50 = zext i8 %49 to i32
  %.3287 = tail call i32 @llvm.umin.i32(i32 %.2286390, i32 %50)
  %.3297 = tail call i32 @llvm.umax.i32(i32 %.2296389, i32 %44)
  %.3302 = tail call i32 @llvm.umax.i32(i32 %.2301388, i32 %47)
  %.3308 = tail call i32 @llvm.umax.i32(i32 %.2307387, i32 %50)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit379, label %.lr.ph, !llvm.loop !12

.loopexit379:                                     ; preds = %.lr.ph, %.lr.ph407, %.preheader380, %.preheader378
  %.2312 = phi i32 [ 0, %.preheader378 ], [ 255, %.preheader380 ], [ %.1311, %.lr.ph407 ], [ 255, %.lr.ph ]
  %.4309 = phi i32 [ 0, %.preheader378 ], [ 0, %.preheader380 ], [ %.1306, %.lr.ph407 ], [ %.3308, %.lr.ph ]
  %.4303 = phi i32 [ 0, %.preheader378 ], [ 0, %.preheader380 ], [ %.1300, %.lr.ph407 ], [ %.3302, %.lr.ph ]
  %.4298 = phi i32 [ 0, %.preheader378 ], [ 0, %.preheader380 ], [ %.1295, %.lr.ph407 ], [ %.3297, %.lr.ph ]
  %.2291 = phi i32 [ 255, %.preheader378 ], [ 255, %.preheader380 ], [ %.1290, %.lr.ph407 ], [ 255, %.lr.ph ]
  %.4288 = phi i32 [ 255, %.preheader378 ], [ 255, %.preheader380 ], [ %.1285, %.lr.ph407 ], [ %.3287, %.lr.ph ]
  %.4283 = phi i32 [ 255, %.preheader378 ], [ 255, %.preheader380 ], [ %.1280, %.lr.ph407 ], [ %.3282, %.lr.ph ]
  %.4 = phi i32 [ 255, %.preheader378 ], [ 255, %.preheader380 ], [ %spec.select, %.lr.ph407 ], [ %spec.select360, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  %51 = call noundef ptr @_ZN6basisuL17color_quad_u8_setEPN6basist13color_quad_u8Eiiii(ptr noundef nonnull %8, i32 noundef %.4, i32 noundef %.4283, i32 noundef %.4288, i32 noundef %.2291)
  %52 = call noundef ptr @_ZN6basisuL17color_quad_u8_setEPN6basist13color_quad_u8Eiiii(ptr noundef nonnull %9, i32 noundef %.4298, i32 noundef %.4303, i32 noundef %.4309, i32 noundef %.2312)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %10) #6
  %53 = load i32, ptr %8, align 4
  store i32 %53, ptr %10, align 16, !tbaa !9
  %54 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %25
  %55 = load i32, ptr %9, align 4
  store i32 %55, ptr %54, align 4, !tbaa !9
  %56 = icmp ugt i32 %18, 1
  %57 = trunc i32 %55 to i8
  %58 = trunc i32 %53 to i8
  %59 = lshr i32 %55, 8
  %60 = trunc i32 %59 to i8
  %61 = lshr i32 %53, 8
  %62 = trunc i32 %61 to i8
  %63 = lshr i32 %55, 16
  %64 = trunc i32 %63 to i8
  %65 = lshr i32 %53, 16
  %66 = trunc i32 %65 to i8
  %67 = lshr i32 %55, 24
  %68 = trunc nuw i32 %67 to i8
  %69 = lshr i32 %53, 24
  %70 = trunc nuw i32 %69 to i8
  br i1 %56, label %.lr.ph417, label %._crit_edge

.lr.ph417:                                        ; preds = %.loopexit379
  %71 = getelementptr inbounds i8, ptr %8, i64 1
  %72 = getelementptr inbounds i8, ptr %9, i64 1
  %73 = getelementptr inbounds i8, ptr %8, i64 2
  %74 = getelementptr inbounds i8, ptr %9, i64 2
  %75 = getelementptr inbounds i8, ptr %8, i64 3
  %76 = getelementptr inbounds i8, ptr %9, i64 3
  br label %97

._crit_edge.loopexit:                             ; preds = %130
  %.pre = load i8, ptr %9, align 4, !tbaa !9
  %.pre513 = load i8, ptr %8, align 4, !tbaa !9
  %.pre514 = load i8, ptr %72, align 1, !tbaa !9
  %.pre516 = load i8, ptr %71, align 1, !tbaa !9
  %.pre518 = load i8, ptr %74, align 2, !tbaa !9
  %.pre520 = load i8, ptr %73, align 2, !tbaa !9
  %.pre522 = load i8, ptr %76, align 1, !tbaa !9
  %.pre524 = load i8, ptr %75, align 1, !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.loopexit379
  %77 = phi i8 [ %.pre524, %._crit_edge.loopexit ], [ %70, %.loopexit379 ]
  %78 = phi i8 [ %.pre522, %._crit_edge.loopexit ], [ %68, %.loopexit379 ]
  %79 = phi i8 [ %.pre520, %._crit_edge.loopexit ], [ %66, %.loopexit379 ]
  %80 = phi i8 [ %.pre518, %._crit_edge.loopexit ], [ %64, %.loopexit379 ]
  %81 = phi i8 [ %.pre516, %._crit_edge.loopexit ], [ %62, %.loopexit379 ]
  %82 = phi i8 [ %.pre514, %._crit_edge.loopexit ], [ %60, %.loopexit379 ]
  %83 = phi i8 [ %.pre513, %._crit_edge.loopexit ], [ %58, %.loopexit379 ]
  %84 = phi i8 [ %.pre, %._crit_edge.loopexit ], [ %57, %.loopexit379 ]
  %85 = zext i8 %84 to i32
  %86 = zext i8 %83 to i32
  %87 = sub nsw i32 %85, %86
  %88 = zext i8 %82 to i32
  %89 = zext i8 %81 to i32
  %90 = sub nsw i32 %88, %89
  %91 = zext i8 %80 to i32
  %92 = zext i8 %79 to i32
  %93 = sub nsw i32 %91, %92
  %94 = zext i8 %78 to i32
  %95 = zext i8 %77 to i32
  %96 = sub nsw i32 %94, %95
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %11) #6
  br i1 %13, label %.preheader374, label %154

.preheader374:                                    ; preds = %._crit_edge
  %.not465 = icmp eq i32 %0, 0
  br i1 %.not465, label %.loopexit375.thread, label %.lr.ph421.preheader

.lr.ph421.preheader:                              ; preds = %.preheader374
  %wide.trip.count502 = zext nneg i32 %0 to i64
  br label %.lr.ph421

97:                                               ; preds = %.lr.ph417, %130
  %indvars.iv489 = phi i64 [ 1, %.lr.ph417 ], [ %indvars.iv.next490, %130 ]
  %98 = load i8, ptr %8, align 4, !tbaa !9
  %99 = zext i8 %98 to i32
  %100 = load i8, ptr %9, align 4, !tbaa !9
  %101 = zext i8 %100 to i32
  %102 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv489
  %103 = load i32, ptr %102, align 4, !tbaa !5
  %104 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %99, i32 noundef %101, i32 noundef %103)
  %105 = trunc i32 %104 to i8
  %106 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %indvars.iv489
  store i8 %105, ptr %106, align 4, !tbaa !9
  %107 = load i8, ptr %71, align 1, !tbaa !9
  %108 = zext i8 %107 to i32
  %109 = load i8, ptr %72, align 1, !tbaa !9
  %110 = zext i8 %109 to i32
  %111 = load i32, ptr %102, align 4, !tbaa !5
  %112 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %108, i32 noundef %110, i32 noundef %111)
  %113 = trunc i32 %112 to i8
  %114 = getelementptr inbounds i8, ptr %106, i64 1
  store i8 %113, ptr %114, align 1, !tbaa !9
  %115 = load i8, ptr %73, align 2, !tbaa !9
  %116 = zext i8 %115 to i32
  %117 = load i8, ptr %74, align 2, !tbaa !9
  %118 = zext i8 %117 to i32
  %119 = load i32, ptr %102, align 4, !tbaa !5
  %120 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %116, i32 noundef %118, i32 noundef %119)
  %121 = trunc i32 %120 to i8
  %122 = getelementptr inbounds i8, ptr %106, i64 2
  store i8 %121, ptr %122, align 2, !tbaa !9
  br i1 %13, label %123, label %130

123:                                              ; preds = %97
  %124 = load i8, ptr %75, align 1, !tbaa !9
  %125 = zext i8 %124 to i32
  %126 = load i8, ptr %76, align 1, !tbaa !9
  %127 = zext i8 %126 to i32
  %128 = load i32, ptr %102, align 4, !tbaa !5
  %129 = call noundef i32 @_ZN6basisuL23astc_interpolate_linearEjjj(i32 noundef %125, i32 noundef %127, i32 noundef %128)
  br label %130

130:                                              ; preds = %97, %123
  %131 = phi i32 [ %129, %123 ], [ 255, %97 ]
  %132 = trunc i32 %131 to i8
  %133 = getelementptr inbounds i8, ptr %106, i64 3
  store i8 %132, ptr %133, align 1, !tbaa !9
  %indvars.iv.next490 = add nuw nsw i64 %indvars.iv489, 1
  %exitcond493.not = icmp eq i64 %indvars.iv.next490, %25
  br i1 %exitcond493.not, label %._crit_edge.loopexit, label %97, !llvm.loop !13

.lr.ph421:                                        ; preds = %.lr.ph421.preheader, %.lr.ph421
  %indvars.iv499 = phi i64 [ 0, %.lr.ph421.preheader ], [ %indvars.iv.next500, %.lr.ph421 ]
  %134 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %indvars.iv499
  %135 = load i8, ptr %134, align 4, !tbaa !9
  %136 = zext i8 %135 to i32
  %137 = mul nsw i32 %87, %136
  %138 = getelementptr inbounds i8, ptr %134, i64 1
  %139 = load i8, ptr %138, align 1, !tbaa !9
  %140 = zext i8 %139 to i32
  %141 = mul nsw i32 %90, %140
  %142 = add nsw i32 %141, %137
  %143 = getelementptr inbounds i8, ptr %134, i64 2
  %144 = load i8, ptr %143, align 2, !tbaa !9
  %145 = zext i8 %144 to i32
  %146 = mul nsw i32 %93, %145
  %147 = add nsw i32 %142, %146
  %148 = getelementptr inbounds i8, ptr %134, i64 3
  %149 = load i8, ptr %148, align 1, !tbaa !9
  %150 = zext i8 %149 to i32
  %151 = mul nsw i32 %96, %150
  %152 = add nsw i32 %147, %151
  %153 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %indvars.iv499
  store i32 %152, ptr %153, align 4, !tbaa !5
  %indvars.iv.next500 = add nuw nsw i64 %indvars.iv499, 1
  %exitcond503.not = icmp eq i64 %indvars.iv.next500, %wide.trip.count502
  br i1 %exitcond503.not, label %.loopexit375, label %.lr.ph421, !llvm.loop !14

154:                                              ; preds = %._crit_edge
  %155 = icmp eq i8 %78, %77
  br i1 %155, label %.preheader376, label %157

.preheader376:                                    ; preds = %154
  %.not464 = icmp eq i32 %0, 0
  br i1 %.not464, label %.loopexit375.thread, label %.lr.ph419.preheader

.lr.ph419.preheader:                              ; preds = %.preheader376
  %wide.trip.count497 = zext nneg i32 %0 to i64
  %xtraiter = and i64 %wide.trip.count497, 1
  %156 = icmp eq i32 %0, 1
  br i1 %156, label %.loopexit375.loopexit566.unr-lcssa, label %.lr.ph419.preheader.new

.lr.ph419.preheader.new:                          ; preds = %.lr.ph419.preheader
  %unroll_iter = and i64 %wide.trip.count497, 62
  br label %.lr.ph419

157:                                              ; preds = %154
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.3, i32 noundef 1837, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6basisu31color_cell_compression_est_astcEjjPKjjPKN6basist13color_quad_u8EmS1_) #5
  unreachable

.lr.ph419:                                        ; preds = %.lr.ph419, %.lr.ph419.preheader.new
  %indvars.iv494 = phi i64 [ 0, %.lr.ph419.preheader.new ], [ %indvars.iv.next495.1, %.lr.ph419 ]
  %niter = phi i64 [ 0, %.lr.ph419.preheader.new ], [ %niter.next.1, %.lr.ph419 ]
  %158 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %indvars.iv494
  %159 = load i8, ptr %158, align 8, !tbaa !9
  %160 = zext i8 %159 to i32
  %161 = mul nsw i32 %87, %160
  %162 = getelementptr inbounds i8, ptr %158, i64 1
  %163 = load i8, ptr %162, align 1, !tbaa !9
  %164 = zext i8 %163 to i32
  %165 = mul nsw i32 %90, %164
  %166 = add nsw i32 %165, %161
  %167 = getelementptr inbounds i8, ptr %158, i64 2
  %168 = load i8, ptr %167, align 2, !tbaa !9
  %169 = zext i8 %168 to i32
  %170 = mul nsw i32 %93, %169
  %171 = add nsw i32 %166, %170
  %172 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %indvars.iv494
  store i32 %171, ptr %172, align 8, !tbaa !5
  %indvars.iv.next495 = or disjoint i64 %indvars.iv494, 1
  %173 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %indvars.iv.next495
  %174 = load i8, ptr %173, align 4, !tbaa !9
  %175 = zext i8 %174 to i32
  %176 = mul nsw i32 %87, %175
  %177 = getelementptr inbounds i8, ptr %173, i64 1
  %178 = load i8, ptr %177, align 1, !tbaa !9
  %179 = zext i8 %178 to i32
  %180 = mul nsw i32 %90, %179
  %181 = add nsw i32 %180, %176
  %182 = getelementptr inbounds i8, ptr %173, i64 2
  %183 = load i8, ptr %182, align 2, !tbaa !9
  %184 = zext i8 %183 to i32
  %185 = mul nsw i32 %93, %184
  %186 = add nsw i32 %181, %185
  %187 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %indvars.iv.next495
  store i32 %186, ptr %187, align 4, !tbaa !5
  %indvars.iv.next495.1 = add nuw nsw i64 %indvars.iv494, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit375.loopexit566.unr-lcssa, label %.lr.ph419, !llvm.loop !15

.loopexit375.thread:                              ; preds = %.preheader376, %.preheader374
  call void @llvm.lifetime.start.p0(i64 124, ptr nonnull %12) #6
  br label %.lr.ph424.preheader

.loopexit375.loopexit566.unr-lcssa:               ; preds = %.lr.ph419, %.lr.ph419.preheader
  %indvars.iv494.unr = phi i64 [ 0, %.lr.ph419.preheader ], [ %indvars.iv.next495.1, %.lr.ph419 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit375, label %.lr.ph419.epil

.lr.ph419.epil:                                   ; preds = %.loopexit375.loopexit566.unr-lcssa
  %188 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %indvars.iv494.unr
  %189 = load i8, ptr %188, align 4, !tbaa !9
  %190 = zext i8 %189 to i32
  %191 = mul nsw i32 %87, %190
  %192 = getelementptr inbounds i8, ptr %188, i64 1
  %193 = load i8, ptr %192, align 1, !tbaa !9
  %194 = zext i8 %193 to i32
  %195 = mul nsw i32 %90, %194
  %196 = add nsw i32 %195, %191
  %197 = getelementptr inbounds i8, ptr %188, i64 2
  %198 = load i8, ptr %197, align 2, !tbaa !9
  %199 = zext i8 %198 to i32
  %200 = mul nsw i32 %93, %199
  %201 = add nsw i32 %196, %200
  %202 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %indvars.iv494.unr
  store i32 %201, ptr %202, align 4, !tbaa !5
  br label %.loopexit375

.loopexit375:                                     ; preds = %.lr.ph419.epil, %.loopexit375.loopexit566.unr-lcssa, %.lr.ph421
  call void @llvm.lifetime.start.p0(i64 124, ptr nonnull %12) #6
  %.not466 = icmp eq i32 %18, 0
  br i1 %.not466, label %._crit_edge425, label %.lr.ph424.preheader

.lr.ph424.preheader:                              ; preds = %.loopexit375.thread, %.loopexit375
  %.pre525 = load i32, ptr %11, align 16, !tbaa !5
  %min.iters.check = icmp ult i32 %18, 8
  br i1 %min.iters.check, label %.lr.ph424.preheader565, label %vector.ph

.lr.ph424.preheader565:                           ; preds = %middle.block, %.lr.ph424.preheader
  %.ph = phi i32 [ %.pre525, %.lr.ph424.preheader ], [ %vector.recur.extract, %middle.block ]
  %indvars.iv504.ph = phi i64 [ 0, %.lr.ph424.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph424

vector.ph:                                        ; preds = %.lr.ph424.preheader
  %n.vec = and i64 %25, 24
  %vector.recur.init = insertelement <4 x i32> poison, i32 %.pre525, i64 3
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vector.recur = phi <4 x i32> [ %vector.recur.init, %vector.ph ], [ %wide.load554, %vector.body ]
  %203 = or disjoint i64 %index, 1
  %204 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %203
  %205 = getelementptr inbounds i8, ptr %204, i64 16
  %wide.load = load <4 x i32>, ptr %204, align 4, !tbaa !5
  %wide.load554 = load <4 x i32>, ptr %205, align 4, !tbaa !5
  %206 = shufflevector <4 x i32> %vector.recur, <4 x i32> %wide.load, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
  %207 = shufflevector <4 x i32> %wide.load, <4 x i32> %wide.load554, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
  %208 = add <4 x i32> %206, <i32 1, i32 1, i32 1, i32 1>
  %209 = add <4 x i32> %207, <i32 1, i32 1, i32 1, i32 1>
  %210 = add <4 x i32> %208, %wide.load
  %211 = add <4 x i32> %209, %wide.load554
  %212 = ashr <4 x i32> %210, <i32 1, i32 1, i32 1, i32 1>
  %213 = ashr <4 x i32> %211, <i32 1, i32 1, i32 1, i32 1>
  %214 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %index
  %215 = getelementptr inbounds i8, ptr %214, i64 16
  store <4 x i32> %212, ptr %214, align 16, !tbaa !5
  store <4 x i32> %213, ptr %215, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %216 = icmp eq i64 %index.next, %n.vec
  br i1 %216, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %vector.recur.extract = extractelement <4 x i32> %wide.load554, i64 3
  %cmp.n = icmp eq i64 %n.vec, %25
  br i1 %cmp.n, label %._crit_edge425, label %.lr.ph424.preheader565

._crit_edge425:                                   ; preds = %.lr.ph424, %middle.block, %.loopexit375
  %217 = load i32, ptr %6, align 4, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %6, i64 4
  %219 = load i32, ptr %218, align 4, !tbaa !5
  %220 = or i32 %219, %217
  %221 = getelementptr inbounds i8, ptr %6, i64 8
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = or i32 %220, %222
  %224 = getelementptr inbounds i8, ptr %6, i64 12
  %225 = load i32, ptr %224, align 4, !tbaa !5
  %226 = or i32 %223, %225
  %227 = icmp eq i32 %226, 1
  %.not470 = icmp eq i32 %3, 0
  br i1 %227, label %235, label %341

.lr.ph424:                                        ; preds = %.lr.ph424.preheader565, %.lr.ph424
  %228 = phi i32 [ %230, %.lr.ph424 ], [ %.ph, %.lr.ph424.preheader565 ]
  %indvars.iv504 = phi i64 [ %indvars.iv.next505, %.lr.ph424 ], [ %indvars.iv504.ph, %.lr.ph424.preheader565 ]
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %229 = getelementptr inbounds [32 x i32], ptr %11, i64 0, i64 %indvars.iv.next505
  %230 = load i32, ptr %229, align 4, !tbaa !5
  %231 = add i32 %228, 1
  %232 = add i32 %231, %230
  %233 = ashr i32 %232, 1
  %234 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %indvars.iv504
  store i32 %233, ptr %234, align 4, !tbaa !5
  %exitcond508.not = icmp eq i64 %indvars.iv.next505, %25
  br i1 %exitcond508.not, label %._crit_edge425, label %.lr.ph424, !llvm.loop !19

235:                                              ; preds = %._crit_edge425
  br i1 %13, label %.preheader, label %.preheader363

.preheader363:                                    ; preds = %235
  br i1 %.not470, label %.loopexit361, label %.lr.ph449

.lr.ph449:                                        ; preds = %.preheader363
  %236 = add nsw i32 %0, -2
  %237 = icmp sgt i32 %0, 1
  br label %296

.preheader:                                       ; preds = %235
  br i1 %.not470, label %.loopexit361, label %.lr.ph458

.lr.ph458:                                        ; preds = %.preheader
  %238 = add nsw i32 %0, -2
  %239 = icmp sgt i32 %0, 1
  br label %240

240:                                              ; preds = %.loopexit, %.lr.ph458
  %.0322457 = phi i64 [ 0, %.lr.ph458 ], [ %294, %.loopexit ]
  %.0327456 = phi i32 [ 0, %.lr.ph458 ], [ %295, %.loopexit ]
  %241 = zext i32 %.0327456 to i64
  %242 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %241
  %243 = load i8, ptr %242, align 1, !tbaa !9
  %244 = zext i8 %243 to i32
  %245 = mul nsw i32 %87, %244
  %246 = getelementptr inbounds i8, ptr %242, i64 1
  %247 = load i8, ptr %246, align 1, !tbaa !9
  %248 = zext i8 %247 to i32
  %249 = mul nsw i32 %90, %248
  %250 = add nsw i32 %249, %245
  %251 = getelementptr inbounds i8, ptr %242, i64 2
  %252 = load i8, ptr %251, align 1, !tbaa !9
  %253 = zext i8 %252 to i32
  %254 = mul nsw i32 %93, %253
  %255 = add nsw i32 %250, %254
  %256 = getelementptr inbounds i8, ptr %242, i64 3
  %257 = load i8, ptr %256, align 1, !tbaa !9
  %258 = zext i8 %257 to i32
  %259 = mul nsw i32 %96, %258
  %260 = add nsw i32 %255, %259
  br i1 %239, label %.lr.ph455, label %.loopexit

.lr.ph455:                                        ; preds = %240, %266
  %.0335453 = phi i32 [ %267, %266 ], [ %238, %240 ]
  %261 = zext nneg i32 %.0335453 to i64
  %262 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %261
  %263 = load i32, ptr %262, align 4, !tbaa !5
  %.not358 = icmp slt i32 %260, %263
  br i1 %.not358, label %266, label %264

264:                                              ; preds = %.lr.ph455
  %265 = add nuw nsw i32 %.0335453, 1
  br label %.loopexit

266:                                              ; preds = %.lr.ph455
  %267 = add nsw i32 %.0335453, -1
  %268 = icmp sgt i32 %.0335453, 0
  br i1 %268, label %.lr.ph455, label %.loopexit, !llvm.loop !20

.loopexit:                                        ; preds = %266, %240, %264
  %.0334 = phi i32 [ %265, %264 ], [ 0, %240 ], [ 0, %266 ]
  %269 = zext nneg i32 %.0334 to i64
  %270 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %269
  %271 = load i8, ptr %270, align 4, !tbaa !9
  %272 = zext i8 %271 to i32
  %273 = sub nsw i32 %272, %244
  %274 = getelementptr inbounds i8, ptr %270, i64 1
  %275 = load i8, ptr %274, align 1, !tbaa !9
  %276 = zext i8 %275 to i32
  %277 = sub nsw i32 %276, %248
  %278 = getelementptr inbounds i8, ptr %270, i64 2
  %279 = load i8, ptr %278, align 2, !tbaa !9
  %280 = zext i8 %279 to i32
  %281 = sub nsw i32 %280, %253
  %282 = getelementptr inbounds i8, ptr %270, i64 3
  %283 = load i8, ptr %282, align 1, !tbaa !9
  %284 = zext i8 %283 to i32
  %285 = sub nsw i32 %284, %258
  %286 = mul nsw i32 %273, %273
  %287 = mul nsw i32 %277, %277
  %288 = add nuw nsw i32 %287, %286
  %289 = mul nsw i32 %281, %281
  %290 = add nuw nsw i32 %288, %289
  %291 = mul nsw i32 %285, %285
  %292 = add nuw nsw i32 %290, %291
  %293 = zext nneg i32 %292 to i64
  %294 = add i64 %.0322457, %293
  %.not359 = icmp ugt i64 %294, %5
  %295 = add nuw i32 %.0327456, 1
  %exitcond512.not = icmp eq i32 %295, %3
  %or.cond = select i1 %.not359, i1 true, i1 %exitcond512.not
  br i1 %or.cond, label %.loopexit361, label %240, !llvm.loop !21

296:                                              ; preds = %.loopexit362, %.lr.ph449
  %.2324448 = phi i64 [ 0, %.lr.ph449 ], [ %339, %.loopexit362 ]
  %.0336447 = phi i32 [ 0, %.lr.ph449 ], [ %340, %.loopexit362 ]
  %297 = zext i32 %.0336447 to i64
  %298 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %297
  %299 = load i8, ptr %298, align 1, !tbaa !9
  %300 = zext i8 %299 to i32
  %301 = mul nsw i32 %87, %300
  %302 = getelementptr inbounds i8, ptr %298, i64 1
  %303 = load i8, ptr %302, align 1, !tbaa !9
  %304 = zext i8 %303 to i32
  %305 = mul nsw i32 %90, %304
  %306 = add nsw i32 %305, %301
  %307 = getelementptr inbounds i8, ptr %298, i64 2
  %308 = load i8, ptr %307, align 1, !tbaa !9
  %309 = zext i8 %308 to i32
  %310 = mul nsw i32 %93, %309
  %311 = add nsw i32 %306, %310
  br i1 %237, label %.lr.ph446, label %.loopexit362

.lr.ph446:                                        ; preds = %296, %317
  %.0332444 = phi i32 [ %318, %317 ], [ %236, %296 ]
  %312 = zext nneg i32 %.0332444 to i64
  %313 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !5
  %.not356 = icmp slt i32 %311, %314
  br i1 %.not356, label %317, label %315

315:                                              ; preds = %.lr.ph446
  %316 = add nuw nsw i32 %.0332444, 1
  br label %.loopexit362

317:                                              ; preds = %.lr.ph446
  %318 = add nsw i32 %.0332444, -1
  %319 = icmp sgt i32 %.0332444, 0
  br i1 %319, label %.lr.ph446, label %.loopexit362, !llvm.loop !22

.loopexit362:                                     ; preds = %317, %296, %315
  %.0333 = phi i32 [ %316, %315 ], [ 0, %296 ], [ 0, %317 ]
  %320 = zext nneg i32 %.0333 to i64
  %321 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %320
  %322 = load i8, ptr %321, align 4, !tbaa !9
  %323 = zext i8 %322 to i32
  %324 = sub nsw i32 %323, %300
  %325 = getelementptr inbounds i8, ptr %321, i64 1
  %326 = load i8, ptr %325, align 1, !tbaa !9
  %327 = zext i8 %326 to i32
  %328 = sub nsw i32 %327, %304
  %329 = getelementptr inbounds i8, ptr %321, i64 2
  %330 = load i8, ptr %329, align 2, !tbaa !9
  %331 = zext i8 %330 to i32
  %332 = sub nsw i32 %331, %309
  %333 = mul nsw i32 %324, %324
  %334 = mul nsw i32 %328, %328
  %335 = add nuw nsw i32 %334, %333
  %336 = mul nsw i32 %332, %332
  %337 = add nuw nsw i32 %335, %336
  %338 = zext nneg i32 %337 to i64
  %339 = add i64 %.2324448, %338
  %.not357 = icmp ugt i64 %339, %5
  %340 = add nuw i32 %.0336447, 1
  %exitcond511.not = icmp eq i32 %340, %3
  %or.cond539 = select i1 %.not357, i1 true, i1 %exitcond511.not
  br i1 %or.cond539, label %.loopexit361, label %296, !llvm.loop !23

341:                                              ; preds = %._crit_edge425
  br i1 %13, label %.preheader367, label %.preheader371

.preheader371:                                    ; preds = %341
  br i1 %.not470, label %.loopexit361, label %.lr.ph431

.lr.ph431:                                        ; preds = %.preheader371
  %342 = add nsw i32 %0, -2
  %343 = icmp sgt i32 %0, 1
  br label %406

.preheader367:                                    ; preds = %341
  br i1 %.not470, label %.loopexit361, label %.lr.ph440

.lr.ph440:                                        ; preds = %.preheader367
  %344 = add nsw i32 %0, -2
  %345 = icmp sgt i32 %0, 1
  br label %346

346:                                              ; preds = %.loopexit366, %.lr.ph440
  %.0320439 = phi i32 [ 0, %.lr.ph440 ], [ %405, %.loopexit366 ]
  %.4326438 = phi i64 [ 0, %.lr.ph440 ], [ %404, %.loopexit366 ]
  %347 = zext i32 %.0320439 to i64
  %348 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !9
  %350 = zext i8 %349 to i32
  %351 = mul nsw i32 %87, %350
  %352 = getelementptr inbounds i8, ptr %348, i64 1
  %353 = load i8, ptr %352, align 1, !tbaa !9
  %354 = zext i8 %353 to i32
  %355 = mul nsw i32 %90, %354
  %356 = add nsw i32 %355, %351
  %357 = getelementptr inbounds i8, ptr %348, i64 2
  %358 = load i8, ptr %357, align 1, !tbaa !9
  %359 = zext i8 %358 to i32
  %360 = mul nsw i32 %93, %359
  %361 = add nsw i32 %356, %360
  %362 = getelementptr inbounds i8, ptr %348, i64 3
  %363 = load i8, ptr %362, align 1, !tbaa !9
  %364 = zext i8 %363 to i32
  %365 = mul nsw i32 %96, %364
  %366 = add nsw i32 %361, %365
  br i1 %345, label %.lr.ph437, label %.loopexit366

.lr.ph437:                                        ; preds = %346, %372
  %.0316435 = phi i32 [ %373, %372 ], [ %344, %346 ]
  %367 = zext nneg i32 %.0316435 to i64
  %368 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !5
  %.not354 = icmp slt i32 %366, %369
  br i1 %.not354, label %372, label %370

370:                                              ; preds = %.lr.ph437
  %371 = add nuw nsw i32 %.0316435, 1
  br label %.loopexit366

372:                                              ; preds = %.lr.ph437
  %373 = add nsw i32 %.0316435, -1
  %374 = icmp sgt i32 %.0316435, 0
  br i1 %374, label %.lr.ph437, label %.loopexit366, !llvm.loop !24

.loopexit366:                                     ; preds = %372, %346, %370
  %.0317 = phi i32 [ %371, %370 ], [ 0, %346 ], [ 0, %372 ]
  %375 = zext nneg i32 %.0317 to i64
  %376 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %375
  %377 = load i8, ptr %376, align 4, !tbaa !9
  %378 = zext i8 %377 to i32
  %379 = sub nsw i32 %378, %350
  %380 = getelementptr inbounds i8, ptr %376, i64 1
  %381 = load i8, ptr %380, align 1, !tbaa !9
  %382 = zext i8 %381 to i32
  %383 = sub nsw i32 %382, %354
  %384 = getelementptr inbounds i8, ptr %376, i64 2
  %385 = load i8, ptr %384, align 2, !tbaa !9
  %386 = zext i8 %385 to i32
  %387 = sub nsw i32 %386, %359
  %388 = getelementptr inbounds i8, ptr %376, i64 3
  %389 = load i8, ptr %388, align 1, !tbaa !9
  %390 = zext i8 %389 to i32
  %391 = sub nsw i32 %390, %364
  %392 = mul i32 %379, %217
  %393 = mul i32 %392, %379
  %394 = mul i32 %383, %219
  %395 = mul i32 %394, %383
  %396 = add i32 %395, %393
  %397 = mul i32 %387, %222
  %398 = mul i32 %397, %387
  %399 = add i32 %396, %398
  %400 = mul i32 %391, %225
  %401 = mul i32 %400, %391
  %402 = add i32 %399, %401
  %403 = zext i32 %402 to i64
  %404 = add i64 %.4326438, %403
  %.not355 = icmp ugt i64 %404, %5
  %405 = add nuw i32 %.0320439, 1
  %exitcond510.not = icmp eq i32 %405, %3
  %or.cond540 = select i1 %.not355, i1 true, i1 %exitcond510.not
  br i1 %or.cond540, label %.loopexit361, label %346, !llvm.loop !25

406:                                              ; preds = %.loopexit370, %.lr.ph431
  %.0304430 = phi i32 [ 0, %.lr.ph431 ], [ %453, %.loopexit370 ]
  %.6429 = phi i64 [ 0, %.lr.ph431 ], [ %452, %.loopexit370 ]
  %407 = zext i32 %.0304430 to i64
  %408 = getelementptr inbounds %"struct.basist::color_quad_u8", ptr %4, i64 %407
  %409 = load i8, ptr %408, align 1, !tbaa !9
  %410 = zext i8 %409 to i32
  %411 = mul nsw i32 %87, %410
  %412 = getelementptr inbounds i8, ptr %408, i64 1
  %413 = load i8, ptr %412, align 1, !tbaa !9
  %414 = zext i8 %413 to i32
  %415 = mul nsw i32 %90, %414
  %416 = add nsw i32 %415, %411
  %417 = getelementptr inbounds i8, ptr %408, i64 2
  %418 = load i8, ptr %417, align 1, !tbaa !9
  %419 = zext i8 %418 to i32
  %420 = mul nsw i32 %93, %419
  %421 = add nsw i32 %416, %420
  br i1 %343, label %.lr.ph428, label %.loopexit370

.lr.ph428:                                        ; preds = %406, %427
  %.0292426 = phi i32 [ %428, %427 ], [ %342, %406 ]
  %422 = zext nneg i32 %.0292426 to i64
  %423 = getelementptr inbounds [31 x i32], ptr %12, i64 0, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !5
  %.not = icmp slt i32 %421, %424
  br i1 %.not, label %427, label %425

425:                                              ; preds = %.lr.ph428
  %426 = add nuw nsw i32 %.0292426, 1
  br label %.loopexit370

427:                                              ; preds = %.lr.ph428
  %428 = add nsw i32 %.0292426, -1
  %429 = icmp sgt i32 %.0292426, 0
  br i1 %429, label %.lr.ph428, label %.loopexit370, !llvm.loop !26

.loopexit370:                                     ; preds = %427, %406, %425
  %.0293 = phi i32 [ %426, %425 ], [ 0, %406 ], [ 0, %427 ]
  %430 = zext nneg i32 %.0293 to i64
  %431 = getelementptr inbounds [32 x %"struct.basist::color_quad_u8"], ptr %10, i64 0, i64 %430
  %432 = load i8, ptr %431, align 4, !tbaa !9
  %433 = zext i8 %432 to i32
  %434 = sub nsw i32 %433, %410
  %435 = getelementptr inbounds i8, ptr %431, i64 1
  %436 = load i8, ptr %435, align 1, !tbaa !9
  %437 = zext i8 %436 to i32
  %438 = sub nsw i32 %437, %414
  %439 = getelementptr inbounds i8, ptr %431, i64 2
  %440 = load i8, ptr %439, align 2, !tbaa !9
  %441 = zext i8 %440 to i32
  %442 = sub nsw i32 %441, %419
  %443 = mul i32 %434, %217
  %444 = mul i32 %443, %434
  %445 = mul i32 %438, %219
  %446 = mul i32 %445, %438
  %447 = add i32 %446, %444
  %448 = mul i32 %442, %222
  %449 = mul i32 %448, %442
  %450 = add i32 %447, %449
  %451 = zext i32 %450 to i64
  %452 = add i64 %.6429, %451
  %.not353 = icmp ugt i64 %452, %5
  %453 = add nuw i32 %.0304430, 1
  %exitcond509.not = icmp eq i32 %453, %3
  %or.cond541 = select i1 %.not353, i1 true, i1 %exitcond509.not
  br i1 %or.cond541, label %.loopexit361, label %406, !llvm.loop !27

.loopexit361:                                     ; preds = %.loopexit370, %.loopexit366, %.loopexit362, %.loopexit, %.preheader371, %.preheader367, %.preheader363, %.preheader
  %.8 = phi i64 [ 0, %.preheader ], [ 0, %.preheader363 ], [ 0, %.preheader367 ], [ 0, %.preheader371 ], [ %294, %.loopexit ], [ %339, %.loopexit362 ], [ %404, %.loopexit366 ], [ %452, %.loopexit370 ]
  call void @llvm.lifetime.end.p0(i64 124, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  ret i64 %.8
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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" }
attributes #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { noreturn nounwind }
attributes #6 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11, !17, !18}
!17 = !{!"llvm.loop.isvectorized", i32 1}
!18 = !{!"llvm.loop.unroll.runtime.disable"}
!19 = distinct !{!19, !11, !18, !17}
!20 = distinct !{!20, !11}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}
!23 = distinct !{!23, !11}
!24 = distinct !{!24, !11}
!25 = distinct !{!25, !11}
!26 = distinct !{!26, !11}
!27 = distinct !{!27, !11}


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