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

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

%"class.basisu::vector.39" = type { ptr, i32, i32 }
%"class.basisu::vector.14" = type { ptr, i32, i32 }
%"class.basisu::basisu_backend" = type { ptr, %"struct.basisu::basisu_backend_params", %"class.basisu::vector", %"struct.basisu::basisu_backend_output", ptr, %"class.basisu::vector.6", %"class.basisu::vector.8", %"class.basisu::vector.10", %"class.basisu::vector.12", %"class.basisu::vector.14", %"class.basisu::vector.14", %"class.basisu::vector.16", %"class.basisu::vector.16", %"class.basisu::vector.14", %"class.basisu::vector.14" }
%"struct.basisu::basisu_backend_params" = type <{ i8, i8, i8, i8, float, float, i32, i8, [3 x i8], i32, i32, i8, i8, [2 x i8] }>
%"class.basisu::vector" = type { ptr, i32, i32 }
%"struct.basisu::basisu_backend_output" = type { i32, i8, i8, i8, i32, i32, %"class.basisu::vector.0", %"class.basisu::vector.0", %"class.basisu::vector", %"class.basisu::vector.0", %"class.basisu::vector.2", %"class.basisu::vector.4" }
%"class.basisu::vector.0" = type { ptr, i32, i32 }
%"class.basisu::vector.2" = type { ptr, i32, i32 }
%"class.basisu::vector.4" = type { ptr, i32, i32 }
%"class.basisu::vector.6" = type { ptr, i32, i32 }
%"class.basisu::vector.8" = type { ptr, i32, i32 }
%"class.basisu::vector.10" = type { ptr, i32, i32 }
%"class.basisu::vector.12" = type { ptr, i32, i32 }
%"class.basisu::vector.16" = type { ptr, i32, i32 }

@_ZN6basisu14g_hamming_distE = external global [256 x i8], align 16

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIjEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIiEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu14basisu_backend22sort_selector_codebookEv(ptr noundef nonnull align 8 dereferenceable(336) %0) #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %"class.basisu::vector.39", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"class.basisu::vector.14", align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %22 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %23 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 0
  %24 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %24, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %26)
  %28 = zext i32 %27 to i64
  call void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %28, i1 noundef zeroext false)
  %29 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 1
  %30 = getelementptr inbounds %"struct.basisu::basisu_backend_params", ptr %29, i32 0, i32 6
  %31 = load i32, ptr %30, align 4, !tbaa !27
  %32 = icmp eq i32 %31, 0
  br i1 %32, label %38, label %33

33:                                               ; preds = %1
  %34 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 1
  %35 = getelementptr inbounds %"struct.basisu::basisu_backend_params", ptr %34, i32 0, i32 12
  %36 = load i8, ptr %35, align 1, !tbaa !28, !range !29, !noundef !30
  %37 = trunc i8 %36 to i1
  br i1 %37, label %38, label %55

38:                                               ; preds = %33, %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  store i32 0, ptr %4, align 4, !tbaa !31
  br label %39

39:                                               ; preds = %51, %38
  %40 = load i32, ptr %4, align 4, !tbaa !31
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %41)
  %43 = icmp ult i32 %40, %42
  br i1 %43, label %45, label %44

44:                                               ; preds = %39
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  br label %54

45:                                               ; preds = %39
  %46 = load i32, ptr %4, align 4, !tbaa !31
  %47 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %48 = load i32, ptr %4, align 4, !tbaa !31
  %49 = zext i32 %48 to i64
  %50 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %47, i64 noundef %49)
  store i32 %46, ptr %50, align 4, !tbaa !31
  br label %51

51:                                               ; preds = %45
  %52 = load i32, ptr %4, align 4, !tbaa !31
  %53 = add i32 %52, 1
  store i32 %53, ptr %4, align 4, !tbaa !31
  br label %39, !llvm.loop !32

54:                                               ; preds = %44
  br label %287

55:                                               ; preds = %33
  %56 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %57 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %56, i64 noundef 0)
  store i32 0, ptr %57, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  store i32 0, ptr %5, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #5
  call void @_ZN6basisu6vectorIiEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %58 = load ptr, ptr %3, align 8, !tbaa !5
  %59 = invoke noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %58)
          to label %60 unwind label %71

60:                                               ; preds = %55
  %61 = sub i32 %59, 1
  %62 = zext i32 %61 to i64
  invoke void @_ZN6basisu6vectorIiE7reserveEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %62)
          to label %63 unwind label %71

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

64:                                               ; preds = %82, %63
  %65 = load i32, ptr %9, align 4, !tbaa !31
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = invoke noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %66)
          to label %68 unwind label %75

68:                                               ; preds = %64
  %69 = icmp ult i32 %65, %67
  br i1 %69, label %79, label %70

70:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %90

71:                                               ; preds = %60, %55
  %72 = landingpad { ptr, i32 }
          cleanup
  %73 = extractvalue { ptr, i32 } %72, 0
  store ptr %73, ptr %7, align 8
  %74 = extractvalue { ptr, i32 } %72, 1
  store i32 %74, ptr %8, align 4
  br label %286

75:                                               ; preds = %64
  %76 = landingpad { ptr, i32 }
          cleanup
  %77 = extractvalue { ptr, i32 } %76, 0
  store ptr %77, ptr %7, align 8
  %78 = extractvalue { ptr, i32 } %76, 1
  store i32 %78, ptr %8, align 4
  br label %89

79:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %80 = load i32, ptr %9, align 4, !tbaa !31
  store i32 %80, ptr %10, align 4, !tbaa !31
  invoke void @_ZN6basisu6vectorIiE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %81 unwind label %85

81:                                               ; preds = %79
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %82

82:                                               ; preds = %81
  %83 = load i32, ptr %9, align 4, !tbaa !31
  %84 = add i32 %83, 1
  store i32 %84, ptr %9, align 4, !tbaa !31
  br label %64, !llvm.loop !34

85:                                               ; preds = %79
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %7, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %89

89:                                               ; preds = %85, %75
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %286

90:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #5
  %91 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %92 = invoke noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %91)
          to label %93 unwind label %103

93:                                               ; preds = %90
  %94 = zext i32 %92 to i64
  invoke void @_ZN6basisu6vectorIjEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %94)
          to label %95 unwind label %103

95:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !31
  br label %96

96:                                               ; preds = %150, %95
  %97 = load i32, ptr %12, align 4, !tbaa !31
  %98 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %99 = invoke noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %98)
          to label %100 unwind label %107

100:                                              ; preds = %96
  %101 = icmp ult i32 %97, %99
  br i1 %101, label %111, label %102

102:                                              ; preds = %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %153

103:                                              ; preds = %93, %90
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %7, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %8, align 4
  br label %285

107:                                              ; preds = %143, %141, %134, %132, %125, %123, %118, %116, %111, %96
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %7, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %284

111:                                              ; preds = %100
  %112 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %113 = load i32, ptr %12, align 4, !tbaa !31
  %114 = zext i32 %113 to i64
  %115 = invoke noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %112, i64 noundef %114)
          to label %116 unwind label %107

116:                                              ; preds = %111
  %117 = invoke noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %115, i32 noundef 0)
          to label %118 unwind label %107

118:                                              ; preds = %116
  %119 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %120 = load i32, ptr %12, align 4, !tbaa !31
  %121 = zext i32 %120 to i64
  %122 = invoke noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %119, i64 noundef %121)
          to label %123 unwind label %107

123:                                              ; preds = %118
  %124 = invoke noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %122, i32 noundef 1)
          to label %125 unwind label %107

125:                                              ; preds = %123
  %126 = shl i32 %124, 8
  %127 = or i32 %117, %126
  %128 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %129 = load i32, ptr %12, align 4, !tbaa !31
  %130 = zext i32 %129 to i64
  %131 = invoke noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %128, i64 noundef %130)
          to label %132 unwind label %107

132:                                              ; preds = %125
  %133 = invoke noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %131, i32 noundef 2)
          to label %134 unwind label %107

134:                                              ; preds = %132
  %135 = shl i32 %133, 16
  %136 = or i32 %127, %135
  %137 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 6
  %138 = load i32, ptr %12, align 4, !tbaa !31
  %139 = zext i32 %138 to i64
  %140 = invoke noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %137, i64 noundef %139)
          to label %141 unwind label %107

141:                                              ; preds = %134
  %142 = invoke noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %140, i32 noundef 3)
          to label %143 unwind label %107

143:                                              ; preds = %141
  %144 = shl i32 %142, 24
  %145 = or i32 %136, %144
  %146 = load i32, ptr %12, align 4, !tbaa !31
  %147 = zext i32 %146 to i64
  %148 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %147)
          to label %149 unwind label %107

149:                                              ; preds = %143
  store i32 %145, ptr %148, align 4, !tbaa !31
  br label %150

150:                                              ; preds = %149
  %151 = load i32, ptr %12, align 4, !tbaa !31
  %152 = add i32 %151, 1
  store i32 %152, ptr %12, align 4, !tbaa !31
  br label %96, !llvm.loop !35

153:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 1, ptr %13, align 4, !tbaa !31
  br label %154

154:                                              ; preds = %274, %153
  %155 = load i32, ptr %13, align 4, !tbaa !31
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  %157 = invoke noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %156)
          to label %158 unwind label %161

158:                                              ; preds = %154
  %159 = icmp ult i32 %155, %157
  br i1 %159, label %165, label %160

160:                                              ; preds = %158
  store i32 11, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %283

161:                                              ; preds = %154
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %7, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %8, align 4
  br label %282

165:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 100, ptr %15, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !31
  br label %166

166:                                              ; preds = %244, %165
  %167 = load i32, ptr %17, align 4, !tbaa !31
  %168 = invoke noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %169 unwind label %172

169:                                              ; preds = %166
  %170 = icmp ult i32 %167, %168
  br i1 %170, label %176, label %171

171:                                              ; preds = %169
  store i32 14, ptr %14, align 4
  br label %248

172:                                              ; preds = %166
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %7, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %8, align 4
  br label %249

176:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %177 = load i32, ptr %17, align 4, !tbaa !31
  %178 = zext i32 %177 to i64
  %179 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %178)
          to label %180 unwind label %231

180:                                              ; preds = %176
  %181 = load i32, ptr %179, align 4, !tbaa !31
  store i32 %181, ptr %18, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %182 = load i32, ptr %5, align 4, !tbaa !31
  %183 = zext i32 %182 to i64
  %184 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %183)
          to label %185 unwind label %235

185:                                              ; preds = %180
  %186 = load i32, ptr %184, align 4, !tbaa !31
  %187 = load i32, ptr %18, align 4, !tbaa !31
  %188 = sext i32 %187 to i64
  %189 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %188)
          to label %190 unwind label %235

190:                                              ; preds = %185
  %191 = load i32, ptr %189, align 4, !tbaa !31
  %192 = xor i32 %186, %191
  store i32 %192, ptr %19, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %193 = load i32, ptr %19, align 4, !tbaa !31
  %194 = and i32 %193, 255
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %195
  %197 = load i8, ptr %196, align 1, !tbaa !36
  %198 = zext i8 %197 to i32
  %199 = load i32, ptr %19, align 4, !tbaa !31
  %200 = lshr i32 %199, 8
  %201 = and i32 %200, 255
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %202
  %204 = load i8, ptr %203, align 1, !tbaa !36
  %205 = zext i8 %204 to i32
  %206 = add nsw i32 %198, %205
  %207 = load i32, ptr %19, align 4, !tbaa !31
  %208 = lshr i32 %207, 16
  %209 = and i32 %208, 255
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %210
  %212 = load i8, ptr %211, align 1, !tbaa !36
  %213 = zext i8 %212 to i32
  %214 = add nsw i32 %206, %213
  %215 = load i32, ptr %19, align 4, !tbaa !31
  %216 = lshr i32 %215, 24
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %217
  %219 = load i8, ptr %218, align 1, !tbaa !36
  %220 = zext i8 %219 to i32
  %221 = add nsw i32 %214, %220
  store i32 %221, ptr %20, align 4, !tbaa !31
  %222 = load i32, ptr %20, align 4, !tbaa !31
  %223 = load i32, ptr %15, align 4, !tbaa !31
  %224 = icmp ult i32 %222, %223
  br i1 %224, label %225, label %240

225:                                              ; preds = %190
  %226 = load i32, ptr %20, align 4, !tbaa !31
  store i32 %226, ptr %15, align 4, !tbaa !31
  %227 = load i32, ptr %17, align 4, !tbaa !31
  store i32 %227, ptr %16, align 4, !tbaa !31
  %228 = load i32, ptr %15, align 4, !tbaa !31
  %229 = icmp ule i32 %228, 1
  br i1 %229, label %230, label %239

230:                                              ; preds = %225
  store i32 14, ptr %14, align 4
  br label %241

231:                                              ; preds = %176
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %7, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %8, align 4
  br label %247

235:                                              ; preds = %185, %180
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %7, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %247

239:                                              ; preds = %225
  br label %240

240:                                              ; preds = %239, %190
  store i32 0, ptr %14, align 4
  br label %241

241:                                              ; preds = %240, %230
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %242 = load i32, ptr %14, align 4
  switch i32 %242, label %248 [
    i32 0, label %243
  ]

243:                                              ; preds = %241
  br label %244

244:                                              ; preds = %243
  %245 = load i32, ptr %17, align 4, !tbaa !31
  %246 = add i32 %245, 1
  store i32 %246, ptr %17, align 4, !tbaa !31
  br label %166, !llvm.loop !37

247:                                              ; preds = %235, %231
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %249

248:                                              ; preds = %241, %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %250

249:                                              ; preds = %247, %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %281

250:                                              ; preds = %248
  %251 = load i32, ptr %16, align 4, !tbaa !31
  %252 = zext i32 %251 to i64
  %253 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %252)
          to label %254 unwind label %277

254:                                              ; preds = %250
  %255 = load i32, ptr %253, align 4, !tbaa !31
  store i32 %255, ptr %5, align 4, !tbaa !31
  %256 = load i32, ptr %5, align 4, !tbaa !31
  %257 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %258 = load i32, ptr %13, align 4, !tbaa !31
  %259 = zext i32 %258 to i64
  %260 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %257, i64 noundef %259)
          to label %261 unwind label %277

261:                                              ; preds = %254
  store i32 %256, ptr %260, align 4, !tbaa !31
  %262 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %263 unwind label %277

263:                                              ; preds = %261
  %264 = load i32, ptr %262, align 4, !tbaa !31
  %265 = load i32, ptr %16, align 4, !tbaa !31
  %266 = zext i32 %265 to i64
  %267 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %266)
          to label %268 unwind label %277

268:                                              ; preds = %263
  store i32 %264, ptr %267, align 4, !tbaa !31
  %269 = invoke noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %270 unwind label %277

270:                                              ; preds = %268
  %271 = sub i32 %269, 1
  %272 = zext i32 %271 to i64
  invoke void @_ZN6basisu6vectorIiE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %272, i1 noundef zeroext false)
          to label %273 unwind label %277

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

274:                                              ; preds = %273
  %275 = load i32, ptr %13, align 4, !tbaa !31
  %276 = add i32 %275, 1
  store i32 %276, ptr %13, align 4, !tbaa !31
  br label %154, !llvm.loop !38

277:                                              ; preds = %270, %268, %263, %261, %254, %250
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %7, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %8, align 4
  br label %281

281:                                              ; preds = %277, %249
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %282

282:                                              ; preds = %281, %161
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %284

283:                                              ; preds = %160
  call void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #5
  call void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  br label %287

284:                                              ; preds = %282, %107
  call void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  br label %285

285:                                              ; preds = %284, %103
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #5
  br label %286

286:                                              ; preds = %285, %89, %71
  call void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %312

287:                                              ; preds = %283, %54
  %288 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 13
  %289 = load ptr, ptr %3, align 8, !tbaa !5
  %290 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %289)
  %291 = zext i32 %290 to i64
  call void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %288, i64 noundef %291, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 0, ptr %21, align 4, !tbaa !31
  br label %292

292:                                              ; preds = %308, %287
  %293 = load i32, ptr %21, align 4, !tbaa !31
  %294 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %295 = call noundef i32 @_ZNK6basisu6vectorIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %294)
  %296 = icmp ult i32 %293, %295
  br i1 %296, label %298, label %297

297:                                              ; preds = %292
  store i32 17, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %311

298:                                              ; preds = %292
  %299 = load i32, ptr %21, align 4, !tbaa !31
  %300 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 13
  %301 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %22, i32 0, i32 14
  %302 = load i32, ptr %21, align 4, !tbaa !31
  %303 = zext i32 %302 to i64
  %304 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %301, i64 noundef %303)
  %305 = load i32, ptr %304, align 4, !tbaa !31
  %306 = zext i32 %305 to i64
  %307 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %300, i64 noundef %306)
  store i32 %299, ptr %307, align 4, !tbaa !31
  br label %308

308:                                              ; preds = %298
  %309 = load i32, ptr %21, align 4, !tbaa !31
  %310 = add i32 %309, 1
  store i32 %310, ptr %21, align 4, !tbaa !31
  br label %292, !llvm.loop !39

311:                                              ; preds = %297
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  ret void

312:                                              ; preds = %286
  %313 = load ptr, ptr %7, align 8
  %314 = load i32, ptr %8, align 4
  %315 = insertvalue { ptr, i32 } poison, ptr %313, 0
  %316 = insertvalue { ptr, i32 } %315, i32 %314, 1
  resume { ptr, i32 } %316
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE7reserveEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16), i32 noundef) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext) #3 align 2

attributes #0 = { 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 #1 = { 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSN6basisu14basisu_backendE", !6, i64 0, !11, i64 8, !15, i64 40, !16, i64 56, !6, i64 168, !21, i64 176, !22, i64 192, !23, i64 208, !24, i64 224, !25, i64 240, !25, i64 256, !26, i64 272, !26, i64 288, !25, i64 304, !25, i64 320}
!11 = !{!"_ZTSN6basisu21basisu_backend_paramsE", !12, i64 0, !12, i64 1, !12, i64 2, !13, i64 4, !13, i64 8, !14, i64 12, !12, i64 16, !14, i64 20, !14, i64 24, !12, i64 28, !12, i64 29}
!12 = !{!"bool", !7, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTSN6basisu6vectorINS_25basisu_backend_slice_descEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!16 = !{!"_ZTSN6basisu21basisu_backend_outputE", !17, i64 0, !12, i64 4, !12, i64 5, !12, i64 6, !14, i64 8, !14, i64 12, !18, i64 16, !18, i64 32, !15, i64 48, !18, i64 64, !19, i64 80, !20, i64 96}
!17 = !{!"_ZTSN6basist16basis_tex_formatE", !7, i64 0}
!18 = !{!"_ZTSN6basisu6vectorIhEE", !6, i64 0, !14, i64 8, !14, i64 12}
!19 = !{!"_ZTSN6basisu6vectorINS0_IhEEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!20 = !{!"_ZTSN6basisu6vectorItEE", !6, i64 0, !14, i64 8, !14, i64 12}
!21 = !{!"_ZTSN6basisu6vectorINS_27etc1_endpoint_palette_entryEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!22 = !{!"_ZTSN6basisu6vectorIN6basist27etc1_selector_palette_entryEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!23 = !{!"_ZTSN6basisu6vectorINS_14basisu_backend34etc1_global_selector_cb_entry_descEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!24 = !{!"_ZTSN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEE", !6, i64 0, !14, i64 8, !14, i64 12}
!25 = !{!"_ZTSN6basisu6vectorIjEE", !6, i64 0, !14, i64 8, !14, i64 12}
!26 = !{!"_ZTSN6basisu6vectorIbEE", !6, i64 0, !14, i64 8, !14, i64 12}
!27 = !{!10, !14, i64 20}
!28 = !{!10, !12, i64 37}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!14, !14, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = !{!7, !7, i64 0}
!37 = distinct !{!37, !33}
!38 = distinct !{!38, !33}
!39 = distinct !{!39, !33}


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

%"class.basisu::vector.39" = type { ptr, i32, i32 }
%"class.basisu::vector.14" = type { ptr, i32, i32 }

@_ZN6basisu14g_hamming_distE = external local_unnamed_addr global [256 x i8], align 16

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIjEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIiEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu14basisu_backend22sort_selector_codebookEv(ptr noundef nonnull align 8 dereferenceable(336) %0) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.basisu::vector.39", align 8
  %3 = alloca i32, align 4
  %4 = alloca %"class.basisu::vector.14", align 8
  %5 = load ptr, ptr %0, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 320
  %7 = tail call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %8 = zext i32 %7 to i64
  tail call void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %8, i1 noundef zeroext false)
  %9 = getelementptr inbounds i8, ptr %0, i64 20
  %10 = load i32, ptr %9, align 4, !tbaa !26
  %11 = icmp eq i32 %10, 0
  br i1 %11, label %16, label %12

12:                                               ; preds = %1
  %13 = getelementptr inbounds i8, ptr %0, i64 37
  %14 = load i8, ptr %13, align 1, !tbaa !27, !range !28, !noundef !29
  %15 = trunc nuw i8 %14 to i1
  br i1 %15, label %16, label %23

16:                                               ; preds = %12, %1
  %17 = tail call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %.not95 = icmp eq i32 %17, 0
  br i1 %.not95, label %.loopexit, label %.lr.ph89

.lr.ph89:                                         ; preds = %16, %.lr.ph89
  %indvars.iv104 = phi i64 [ %indvars.iv.next105, %.lr.ph89 ], [ 0, %16 ]
  %18 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %indvars.iv104)
  %19 = trunc nuw i64 %indvars.iv104 to i32
  store i32 %19, ptr %18, align 4, !tbaa !30
  %indvars.iv.next105 = add nuw nsw i64 %indvars.iv104, 1
  %20 = tail call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %21 = zext i32 %20 to i64
  %22 = icmp ult i64 %indvars.iv.next105, %21
  br i1 %22, label %.lr.ph89, label %.loopexit, !llvm.loop !31

23:                                               ; preds = %12
  %24 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 0)
  store i32 0, ptr %24, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #5
  call void @_ZN6basisu6vectorIiEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %25 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %26 = add i32 %25, -1
  %27 = zext i32 %26 to i64
  invoke void @_ZN6basisu6vectorIiE7reserveEm(ptr noundef nonnull align 8 dereferenceable(16) %2, i64 noundef %27)
          to label %.preheader73 unwind label %34

.preheader73:                                     ; preds = %23
  %28 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %29 = icmp ugt i32 %28, 1
  br i1 %29, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %36, %.preheader73
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #5
  %30 = getelementptr inbounds i8, ptr %0, i64 192
  %31 = call noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %30)
  %32 = zext i32 %31 to i64
  invoke void @_ZN6basisu6vectorIjEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %32)
          to label %.preheader72 unwind label %44

.preheader72:                                     ; preds = %._crit_edge
  %33 = call noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %30)
  %.not = icmp eq i32 %33, 0
  br i1 %.not, label %.preheader71, label %.lr.ph76

34:                                               ; preds = %23
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %124

.lr.ph:                                           ; preds = %.preheader73, %36
  %.05974 = phi i32 [ %37, %36 ], [ 1, %.preheader73 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #5
  store i32 %.05974, ptr %3, align 4, !tbaa !30
  invoke void @_ZN6basisu6vectorIiE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 4 dereferenceable(4) %3)
          to label %36 unwind label %40

36:                                               ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  %37 = add nuw i32 %.05974, 1
  %38 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %39 = icmp ult i32 %37, %38
  br i1 %39, label %.lr.ph, label %._crit_edge, !llvm.loop !33

40:                                               ; preds = %.lr.ph
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  br label %124

.preheader71:                                     ; preds = %.lr.ph76, %.preheader72
  %42 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %43 = icmp ugt i32 %42, 1
  br i1 %43, label %.preheader, label %._crit_edge86

44:                                               ; preds = %._crit_edge
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %123

.lr.ph76:                                         ; preds = %.preheader72, %.lr.ph76
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph76 ], [ 0, %.preheader72 ]
  %46 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv)
  %47 = call noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %46, i32 noundef 0)
  %48 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv)
  %49 = call noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %48, i32 noundef 1)
  %50 = shl i32 %49, 8
  %51 = or i32 %50, %47
  %52 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv)
  %53 = call noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %52, i32 noundef 2)
  %54 = shl i32 %53, 16
  %55 = or i32 %51, %54
  %56 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv)
  %57 = call noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16) %56, i32 noundef 3)
  %58 = shl i32 %57, 24
  %59 = or i32 %55, %58
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %indvars.iv)
  store i32 %59, ptr %60, align 4, !tbaa !30
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %61 = call noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %30)
  %62 = zext i32 %61 to i64
  %63 = icmp ult i64 %indvars.iv.next, %62
  br i1 %63, label %.lr.ph76, label %.preheader71, !llvm.loop !34

.preheader:                                       ; preds = %.preheader71, %117
  %indvars.iv101 = phi i64 [ %indvars.iv.next102, %117 ], [ 1, %.preheader71 ]
  %.04885 = phi i32 [ %109, %117 ], [ 0, %.preheader71 ]
  %64 = call noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %.not94 = icmp eq i32 %64, 0
  br i1 %.not94, label %._crit_edge81, label %.lr.ph80

.lr.ph80:                                         ; preds = %.preheader
  %65 = zext i32 %.04885 to i64
  br label %66

._crit_edge86:                                    ; preds = %117, %.preheader71
  call void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  call void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  br label %.loopexit

66:                                               ; preds = %.lr.ph80, %.thread
  %indvars.iv98 = phi i64 [ 0, %.lr.ph80 ], [ %indvars.iv.next99, %.thread ]
  %.05178 = phi i32 [ 0, %.lr.ph80 ], [ %.270, %.thread ]
  %.05377 = phi i32 [ 100, %.lr.ph80 ], [ %.25569, %.thread ]
  %67 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2, i64 noundef %indvars.iv98)
  %68 = load i32, ptr %67, align 4, !tbaa !30
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %65)
  %70 = load i32, ptr %69, align 4, !tbaa !30
  %71 = sext i32 %68 to i64
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %71)
  %73 = load i32, ptr %72, align 4, !tbaa !30
  %74 = xor i32 %73, %70
  %75 = and i32 %74, 255
  %76 = zext nneg i32 %75 to i64
  %77 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %76
  %78 = load i8, ptr %77, align 1, !tbaa !35
  %79 = zext i8 %78 to i32
  %80 = lshr i32 %74, 8
  %81 = and i32 %80, 255
  %82 = zext nneg i32 %81 to i64
  %83 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %82
  %84 = load i8, ptr %83, align 1, !tbaa !35
  %85 = zext i8 %84 to i32
  %86 = add nuw nsw i32 %85, %79
  %87 = lshr i32 %74, 16
  %88 = and i32 %87, 255
  %89 = zext nneg i32 %88 to i64
  %90 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %89
  %91 = load i8, ptr %90, align 1, !tbaa !35
  %92 = zext i8 %91 to i32
  %93 = add nuw nsw i32 %86, %92
  %94 = lshr i32 %74, 24
  %95 = zext nneg i32 %94 to i64
  %96 = getelementptr inbounds [256 x i8], ptr @_ZN6basisu14g_hamming_distE, i64 0, i64 %95
  %97 = load i8, ptr %96, align 1, !tbaa !35
  %98 = zext i8 %97 to i32
  %99 = add nuw nsw i32 %93, %98
  %100 = icmp ult i32 %99, %.05377
  br i1 %100, label %101, label %.thread

101:                                              ; preds = %66
  %102 = icmp ugt i32 %99, 1
  %103 = trunc nuw i64 %indvars.iv98 to i32
  br i1 %102, label %.thread, label %._crit_edge81

.thread:                                          ; preds = %66, %101
  %.270 = phi i32 [ %103, %101 ], [ %.05178, %66 ]
  %.25569 = phi i32 [ %99, %101 ], [ %.05377, %66 ]
  %indvars.iv.next99 = add nuw nsw i64 %indvars.iv98, 1
  %104 = call noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %105 = zext i32 %104 to i64
  %106 = icmp ult i64 %indvars.iv.next99, %105
  br i1 %106, label %66, label %._crit_edge81, !llvm.loop !36

._crit_edge81:                                    ; preds = %101, %.thread, %.preheader
  %.3 = phi i32 [ 0, %.preheader ], [ %.270, %.thread ], [ %103, %101 ]
  %107 = zext i32 %.3 to i64
  %108 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2, i64 noundef %107)
  %109 = load i32, ptr %108, align 4, !tbaa !30
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %indvars.iv101)
  store i32 %109, ptr %110, align 4, !tbaa !30
  %111 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %112 = load i32, ptr %111, align 4, !tbaa !30
  %113 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2, i64 noundef %107)
  store i32 %112, ptr %113, align 4, !tbaa !30
  %114 = call noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %115 = add i32 %114, -1
  %116 = zext i32 %115 to i64
  invoke void @_ZN6basisu6vectorIiE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %2, i64 noundef %116, i1 noundef zeroext false)
          to label %117 unwind label %121

117:                                              ; preds = %._crit_edge81
  %indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1
  %118 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %119 = zext i32 %118 to i64
  %120 = icmp ult i64 %indvars.iv.next102, %119
  br i1 %120, label %.preheader, label %._crit_edge86, !llvm.loop !37

121:                                              ; preds = %._crit_edge81
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6basisu6vectorIjED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  br label %123

123:                                              ; preds = %121, %44
  %.pn = phi { ptr, i32 } [ %122, %121 ], [ %45, %44 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  br label %124

124:                                              ; preds = %123, %40, %34
  %.pn64 = phi { ptr, i32 } [ %41, %40 ], [ %.pn, %123 ], [ %35, %34 ]
  call void @_ZN6basisu6vectorIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  resume { ptr, i32 } %.pn64

.loopexit:                                        ; preds = %.lr.ph89, %16, %._crit_edge86
  %125 = getelementptr inbounds i8, ptr %0, i64 304
  %126 = call noundef i32 @_ZNK6basisu15basisu_frontend27get_total_selector_clustersEv(ptr noundef nonnull align 8 dereferenceable(496) %5)
  %127 = zext i32 %126 to i64
  call void @_ZN6basisu6vectorIjE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16) %125, i64 noundef %127, i1 noundef zeroext false)
  %128 = call noundef i32 @_ZNK6basisu6vectorIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %.not96 = icmp eq i32 %128, 0
  br i1 %.not96, label %._crit_edge93, label %.lr.ph92

._crit_edge93:                                    ; preds = %.lr.ph92, %.loopexit
  ret void

.lr.ph92:                                         ; preds = %.loopexit, %.lr.ph92
  %indvars.iv107 = phi i64 [ %indvars.iv.next108, %.lr.ph92 ], [ 0, %.loopexit ]
  %129 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %indvars.iv107)
  %130 = load i32, ptr %129, align 4, !tbaa !30
  %131 = zext i32 %130 to i64
  %132 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %125, i64 noundef %131)
  %133 = trunc nuw i64 %indvars.iv107 to i32
  store i32 %133, ptr %132, align 4, !tbaa !30
  %indvars.iv.next108 = add nuw nsw i64 %indvars.iv107, 1
  %134 = call noundef i32 @_ZNK6basisu6vectorIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %135 = zext i32 %134 to i64
  %136 = icmp ult i64 %indvars.iv.next108, %135
  br i1 %136, label %.lr.ph92, label %._crit_edge93, !llvm.loop !38
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE7reserveEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIN6basist27etc1_selector_palette_entryEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basist27etc1_selector_palette_entry8get_byteEj(ptr noundef nonnull align 1 dereferenceable(16), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6basisu6vectorIiE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN6basisu6vectorIiE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6basisu6vectorIiE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext) local_unnamed_addr #3 align 2

attributes #0 = { 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 #1 = { 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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN6basisu14basisu_backendE", !7, i64 0, !10, i64 8, !14, i64 40, !15, i64 56, !7, i64 168, !20, i64 176, !21, i64 192, !22, i64 208, !23, i64 224, !24, i64 240, !24, i64 256, !25, i64 272, !25, i64 288, !24, i64 304, !24, i64 320}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN6basisu21basisu_backend_paramsE", !11, i64 0, !11, i64 1, !11, i64 2, !12, i64 4, !12, i64 8, !13, i64 12, !11, i64 16, !13, i64 20, !13, i64 24, !11, i64 28, !11, i64 29}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"float", !8, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!"_ZTSN6basisu6vectorINS_25basisu_backend_slice_descEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!15 = !{!"_ZTSN6basisu21basisu_backend_outputE", !16, i64 0, !11, i64 4, !11, i64 5, !11, i64 6, !13, i64 8, !13, i64 12, !17, i64 16, !17, i64 32, !14, i64 48, !17, i64 64, !18, i64 80, !19, i64 96}
!16 = !{!"_ZTSN6basist16basis_tex_formatE", !8, i64 0}
!17 = !{!"_ZTSN6basisu6vectorIhEE", !7, i64 0, !13, i64 8, !13, i64 12}
!18 = !{!"_ZTSN6basisu6vectorINS0_IhEEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!19 = !{!"_ZTSN6basisu6vectorItEE", !7, i64 0, !13, i64 8, !13, i64 12}
!20 = !{!"_ZTSN6basisu6vectorINS_27etc1_endpoint_palette_entryEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!21 = !{!"_ZTSN6basisu6vectorIN6basist27etc1_selector_palette_entryEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!22 = !{!"_ZTSN6basisu6vectorINS_14basisu_backend34etc1_global_selector_cb_entry_descEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!23 = !{!"_ZTSN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEE", !7, i64 0, !13, i64 8, !13, i64 12}
!24 = !{!"_ZTSN6basisu6vectorIjEE", !7, i64 0, !13, i64 8, !13, i64 12}
!25 = !{!"_ZTSN6basisu6vectorIbEE", !7, i64 0, !13, i64 8, !13, i64 12}
!26 = !{!6, !13, i64 20}
!27 = !{!6, !11, i64 37}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!13, !13, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = !{!8, !8, i64 0}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}


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