; 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::gpu_image" = type { i32, i32, i32, i32, i32, i32, i32, i32, %"class.basisu::vector.42" }
%"class.basisu::vector.42" = type { ptr, i32, i32 }
%"class.basisu::image" = type { i32, i32, i32, %"class.basisu::vector.44" }
%"class.basisu::vector.44" = 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 }
%"class.basisu::vector.14" = type { ptr, i32, i32 }
%"struct.basisu::basisu_backend_slice_desc" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [2 x i8] }>
%"struct.basisu::encoder_block" = type <{ i32, i32, i32, i32, i8, [3 x i8] }>
%"struct.basisu::etc1_endpoint_palette_entry" = type <{ %"class.basisu::color_rgba", i32, i8, [3 x i8] }>
%"class.basisu::color_rgba" = type { %union.anon }
%union.anon = type { [4 x i8] }

@.str.10 = external hidden unnamed_addr constant [28 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 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 nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu14basisu_backend18compute_slice_crcsEv(ptr noundef nonnull align 8 dereferenceable(336) %0) #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.basisu::gpu_image", align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.basisu::image", align 8
  %22 = alloca [256 x i8], align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %23 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %24

24:                                               ; preds = %221, %1
  %25 = load i32, ptr %3, align 4, !tbaa !9
  %26 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 2
  %27 = call noundef i32 @_ZNK6basisu6vectorINS_25basisu_backend_slice_descEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %26)
  %28 = icmp ult i32 %25, %27
  br i1 %28, label %30, label %29

29:                                               ; preds = %24
  store i32 2, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  br label %225

30:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %31 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 2
  %32 = load i32, ptr %3, align 4, !tbaa !9
  %33 = zext i32 %32 to i64
  %34 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %33)
  %35 = getelementptr inbounds %"struct.basisu::basisu_backend_slice_desc", ptr %34, i32 0, i32 3
  %36 = load i32, ptr %35, align 4, !tbaa !11
  store i32 %36, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %37 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 2
  %38 = load i32, ptr %3, align 4, !tbaa !9
  %39 = zext i32 %38 to i64
  %40 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %37, i64 noundef %39)
  %41 = getelementptr inbounds %"struct.basisu::basisu_backend_slice_desc", ptr %40, i32 0, i32 4
  %42 = load i32, ptr %41, align 4, !tbaa !14
  store i32 %42, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %43 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 2
  %44 = load i32, ptr %3, align 4, !tbaa !9
  %45 = zext i32 %44 to i64
  %46 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %43, i64 noundef %45)
  %47 = getelementptr inbounds %"struct.basisu::basisu_backend_slice_desc", ptr %46, i32 0, i32 5
  %48 = load i32, ptr %47, align 4, !tbaa !15
  store i32 %48, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %49 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 2
  %50 = load i32, ptr %3, align 4, !tbaa !9
  %51 = zext i32 %50 to i64
  %52 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %49, i64 noundef %51)
  %53 = getelementptr inbounds %"struct.basisu::basisu_backend_slice_desc", ptr %52, i32 0, i32 6
  %54 = load i32, ptr %53, align 4, !tbaa !16
  store i32 %54, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %9) #7
  call void @_ZN6basisu9gpu_imageC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9)
  %55 = load i32, ptr %5, align 4, !tbaa !9
  %56 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN6basisu9gpu_image4initENS_14texture_formatEjj(ptr noundef nonnull align 8 dereferenceable(48) %9, i32 noundef 0, i32 noundef %55, i32 noundef %56)
          to label %57 unwind label %63

57:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %58

58:                                               ; preds = %175, %57
  %59 = load i32, ptr %12, align 4, !tbaa !9
  %60 = load i32, ptr %8, align 4, !tbaa !9
  %61 = icmp ult i32 %59, %60
  br i1 %61, label %67, label %62

62:                                               ; preds = %58
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %178

63:                                               ; preds = %185, %182, %180, %178, %30
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %10, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %11, align 4
  br label %224

67:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %68

68:                                               ; preds = %167, %67
  %69 = load i32, ptr %13, align 4, !tbaa !9
  %70 = load i32, ptr %7, align 4, !tbaa !9
  %71 = icmp ult i32 %69, %70
  br i1 %71, label %73, label %72

72:                                               ; preds = %68
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %174

73:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %74 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 8
  %75 = load i32, ptr %3, align 4, !tbaa !9
  %76 = zext i32 %75 to i64
  %77 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %74, i64 noundef %76)
          to label %78 unwind label %123

78:                                               ; preds = %73
  %79 = load i32, ptr %13, align 4, !tbaa !9
  %80 = load i32, ptr %12, align 4, !tbaa !9
  %81 = invoke noundef nonnull align 4 dereferenceable(17) ptr @_ZN6basisu8vector2DINS_13encoder_blockEEclEjj(ptr noundef nonnull align 8 dereferenceable(24) %77, i32 noundef %79, i32 noundef %80)
          to label %82 unwind label %123

82:                                               ; preds = %78
  store ptr %81, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %83 = load i32, ptr %13, align 4, !tbaa !9
  %84 = load i32, ptr %12, align 4, !tbaa !9
  %85 = invoke noundef ptr @_ZN6basisu9gpu_image13get_block_ptrEjjj(ptr noundef nonnull align 8 dereferenceable(48) %9, i32 noundef %83, i32 noundef %84, i32 noundef 0)
          to label %86 unwind label %127

86:                                               ; preds = %82
  store ptr %85, ptr %15, align 8, !tbaa !5
  %87 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN6basisu9etc_block12set_diff_bitEb(ptr noundef nonnull align 8 dereferenceable(8) %87, i1 noundef zeroext true)
          to label %88 unwind label %127

88:                                               ; preds = %86
  %89 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN6basisu9etc_block12set_flip_bitEb(ptr noundef nonnull align 8 dereferenceable(8) %89, i1 noundef zeroext true)
          to label %90 unwind label %127

90:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %91 = load ptr, ptr %14, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.basisu::encoder_block", ptr %91, i32 0, i32 1
  %93 = load i32, ptr %92, align 4, !tbaa !17
  store i32 %93, ptr %16, align 4, !tbaa !9
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 5
  %96 = load i32, ptr %16, align 4, !tbaa !9
  %97 = zext i32 %96 to i64
  %98 = invoke noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 noundef %97)
          to label %99 unwind label %131

99:                                               ; preds = %90
  %100 = getelementptr inbounds %"struct.basisu::etc1_endpoint_palette_entry", ptr %98, i32 0, i32 0
  invoke void @_ZN6basisu9etc_block22set_block_color5_etc1sERKNS_10color_rgbaE(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 1 dereferenceable(4) %100)
          to label %101 unwind label %131

101:                                              ; preds = %99
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  %103 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 5
  %104 = load i32, ptr %16, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = invoke noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %103, i64 noundef %105)
          to label %107 unwind label %131

107:                                              ; preds = %101
  %108 = getelementptr inbounds %"struct.basisu::etc1_endpoint_palette_entry", ptr %106, i32 0, i32 1
  %109 = load i32, ptr %108, align 4, !tbaa !19
  invoke void @_ZN6basisu9etc_block22set_inten_tables_etc1sEj(ptr noundef nonnull align 8 dereferenceable(8) %102, i32 noundef %109)
          to label %110 unwind label %131

110:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %111 = load ptr, ptr %14, align 8, !tbaa !5
  %112 = getelementptr inbounds %"struct.basisu::encoder_block", ptr %111, i32 0, i32 2
  %113 = load i32, ptr %112, align 4, !tbaa !22
  store i32 %113, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %114 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 6
  %115 = load i32, ptr %17, align 4, !tbaa !9
  %116 = zext i32 %115 to i64
  %117 = invoke noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %114, i64 noundef %116)
          to label %118 unwind label %135

118:                                              ; preds = %110
  store ptr %117, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %119

119:                                              ; preds = %163, %118
  %120 = load i32, ptr %19, align 4, !tbaa !9
  %121 = icmp ult i32 %120, 4
  br i1 %121, label %139, label %122

122:                                              ; preds = %119
  store i32 11, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %166

123:                                              ; preds = %78, %73
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %10, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %11, align 4
  br label %173

127:                                              ; preds = %88, %86, %82
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %10, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %11, align 4
  br label %172

131:                                              ; preds = %107, %101, %99, %90
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %10, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %11, align 4
  br label %171

135:                                              ; preds = %110
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %10, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %11, align 4
  br label %170

139:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %155, %139
  %141 = load i32, ptr %20, align 4, !tbaa !9
  %142 = icmp ult i32 %141, 4
  br i1 %142, label %144, label %143

143:                                              ; preds = %140
  store i32 14, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %162

144:                                              ; preds = %140
  %145 = load ptr, ptr %15, align 8, !tbaa !5
  %146 = load i32, ptr %20, align 4, !tbaa !9
  %147 = load i32, ptr %19, align 4, !tbaa !9
  %148 = load ptr, ptr %18, align 8, !tbaa !5
  %149 = load i32, ptr %20, align 4, !tbaa !9
  %150 = load i32, ptr %19, align 4, !tbaa !9
  %151 = invoke noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %148, i32 noundef %149, i32 noundef %150)
          to label %152 unwind label %158

152:                                              ; preds = %144
  %153 = zext i8 %151 to i32
  invoke void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %145, i32 noundef %146, i32 noundef %147, i32 noundef %153)
          to label %154 unwind label %158

154:                                              ; preds = %152
  br label %155

155:                                              ; preds = %154
  %156 = load i32, ptr %20, align 4, !tbaa !9
  %157 = add i32 %156, 1
  store i32 %157, ptr %20, align 4, !tbaa !9
  br label %140, !llvm.loop !23

158:                                              ; preds = %152, %144
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %10, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %170

162:                                              ; preds = %143
  br label %163

163:                                              ; preds = %162
  %164 = load i32, ptr %19, align 4, !tbaa !9
  %165 = add i32 %164, 1
  store i32 %165, ptr %19, align 4, !tbaa !9
  br label %119, !llvm.loop !25

166:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  br label %167

167:                                              ; preds = %166
  %168 = load i32, ptr %13, align 4, !tbaa !9
  %169 = add i32 %168, 1
  store i32 %169, ptr %13, align 4, !tbaa !9
  br label %68, !llvm.loop !26

170:                                              ; preds = %158, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %171

171:                                              ; preds = %170, %131
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %172

172:                                              ; preds = %171, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %173

173:                                              ; preds = %172, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %224

174:                                              ; preds = %72
  br label %175

175:                                              ; preds = %174
  %176 = load i32, ptr %12, align 4, !tbaa !9
  %177 = add i32 %176, 1
  store i32 %177, ptr %12, align 4, !tbaa !9
  br label %58, !llvm.loop !27

178:                                              ; preds = %62
  %179 = invoke noundef ptr @_ZN6basisu9gpu_image7get_ptrEv(ptr noundef nonnull align 8 dereferenceable(48) %9)
          to label %180 unwind label %63

180:                                              ; preds = %178
  %181 = invoke noundef i32 @_ZNK6basisu9gpu_image17get_size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(48) %9)
          to label %182 unwind label %63

182:                                              ; preds = %180
  %183 = zext i32 %181 to i64
  %184 = invoke noundef zeroext i16 @_ZN6basist5crc16EPKvmt(ptr noundef %179, i64 noundef %183, i16 noundef zeroext 0)
          to label %185 unwind label %63

185:                                              ; preds = %182
  %186 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 3
  %187 = getelementptr inbounds %"struct.basisu::basisu_backend_output", ptr %186, i32 0, i32 11
  %188 = load i32, ptr %3, align 4, !tbaa !9
  %189 = zext i32 %188 to i64
  %190 = invoke noundef nonnull align 2 dereferenceable(2) ptr @_ZN6basisu6vectorItEixEm(ptr noundef nonnull align 8 dereferenceable(16) %187, i64 noundef %189)
          to label %191 unwind label %63

191:                                              ; preds = %185
  store i16 %184, ptr %190, align 2, !tbaa !28
  %192 = getelementptr inbounds %"class.basisu::basisu_backend", ptr %23, i32 0, i32 1
  %193 = getelementptr inbounds %"struct.basisu::basisu_backend_params", ptr %192, i32 0, i32 2
  %194 = load i8, ptr %193, align 2, !tbaa !30, !range !46, !noundef !47
  %195 = trunc i8 %194 to i1
  br i1 %195, label %196, label %220

196:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  invoke void @_ZN6basisu5imageC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %197 unwind label %206

197:                                              ; preds = %196
  %198 = invoke noundef zeroext i1 @_ZNK6basisu9gpu_image6unpackERNS_5imageE(ptr noundef nonnull align 8 dereferenceable(48) %9, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %199 unwind label %210

199:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 256, ptr %22) #7
  %200 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %201 = load i32, ptr %3, align 4, !tbaa !9
  %202 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %200, i64 noundef 256, ptr noundef @.str.10, i32 noundef %201) #7
  %203 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %204 = invoke noundef zeroext i1 @_ZN6basisu8save_pngEPKcRKNS_5imageEjj(ptr noundef %203, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef 0, i32 noundef 0)
          to label %205 unwind label %214

205:                                              ; preds = %199
  call void @llvm.lifetime.end.p0(i64 256, ptr %22) #7
  call void @_ZN6basisu5imageD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  br label %220

206:                                              ; preds = %196
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %10, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %11, align 4
  br label %219

210:                                              ; preds = %197
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %10, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %11, align 4
  br label %218

214:                                              ; preds = %199
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %10, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 256, ptr %22) #7
  br label %218

218:                                              ; preds = %214, %210
  call void @_ZN6basisu5imageD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %219

219:                                              ; preds = %218, %206
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  br label %224

220:                                              ; preds = %205, %191
  call void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %221

221:                                              ; preds = %220
  %222 = load i32, ptr %3, align 4, !tbaa !9
  %223 = add i32 %222, 1
  store i32 %223, ptr %3, align 4, !tbaa !9
  br label %24, !llvm.loop !48

224:                                              ; preds = %219, %173, %63
  call void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  br label %226

225:                                              ; preds = %29
  ret void

226:                                              ; preds = %224
  %227 = load ptr, ptr %10, align 8
  %228 = load i32, ptr %11, align 4
  %229 = insertvalue { ptr, i32 } poison, ptr %227, 0
  %230 = insertvalue { ptr, i32 } %229, i32 %228, 1
  resume { ptr, i32 } %230
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6basisu9gpu_image4initENS_14texture_formatEjj(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, i32 noundef) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu9etc_block12set_diff_bitEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu9etc_block12set_flip_bitEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #0 align 2

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

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

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

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

declare noundef zeroext i16 @_ZN6basist5crc16EPKvmt(ptr noundef, i64 noundef, i16 noundef zeroext) #5

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

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

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

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

declare noundef zeroext i1 @_ZNK6basisu9gpu_image6unpackERNS_5imageE(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #5

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #6

declare noundef zeroext i1 @_ZN6basisu8save_pngEPKcRKNS_5imageEjj(ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) #5

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nounwind }

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

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


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

%"class.basisu::gpu_image" = type { i32, i32, i32, i32, i32, i32, i32, i32, %"class.basisu::vector.42" }
%"class.basisu::vector.42" = type { ptr, i32, i32 }
%"class.basisu::image" = type { i32, i32, i32, %"class.basisu::vector.44" }
%"class.basisu::vector.44" = type { ptr, i32, i32 }

@.str.10 = external hidden unnamed_addr constant [28 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(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 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 nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6basisu14basisu_backend18compute_slice_crcsEv(ptr noundef nonnull align 8 dereferenceable(336) %0) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.basisu::gpu_image", align 8
  %3 = alloca %"class.basisu::image", align 8
  %4 = alloca [256 x i8], align 16
  %5 = getelementptr inbounds i8, ptr %0, i64 40
  %6 = tail call noundef i32 @_ZNK6basisu6vectorINS_25basisu_backend_slice_descEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 224
  %8 = getelementptr inbounds i8, ptr %0, i64 176
  %9 = getelementptr inbounds i8, ptr %0, i64 192
  %10 = getelementptr inbounds i8, ptr %0, i64 152
  %11 = getelementptr inbounds i8, ptr %0, i64 10
  br label %12

._crit_edge:                                      ; preds = %106, %1
  ret void

12:                                               ; preds = %.lr.ph, %106
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %106 ]
  %13 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv)
  %14 = getelementptr inbounds i8, ptr %13, i64 12
  %15 = load i32, ptr %14, align 4, !tbaa !5
  %16 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv)
  %17 = getelementptr inbounds i8, ptr %16, i64 16
  %18 = load i32, ptr %17, align 4, !tbaa !11
  %19 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv)
  %20 = getelementptr inbounds i8, ptr %19, i64 20
  %21 = load i32, ptr %20, align 4, !tbaa !12
  %22 = call noundef nonnull align 4 dereferenceable(46) ptr @_ZN6basisu6vectorINS_25basisu_backend_slice_descEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv)
  %23 = getelementptr inbounds i8, ptr %22, i64 24
  %24 = load i32, ptr %23, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %2) #7
  call void @_ZN6basisu9gpu_imageC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %2)
  invoke void @_ZN6basisu9gpu_image4initENS_14texture_formatEjj(ptr noundef nonnull align 8 dereferenceable(48) %2, i32 noundef 0, i32 noundef %15, i32 noundef %18)
          to label %.preheader59 unwind label %81

.preheader59:                                     ; preds = %12
  %.not72 = icmp eq i32 %24, 0
  %.not73 = icmp eq i32 %21, 0
  %or.cond = select i1 %.not72, i1 true, i1 %.not73
  br i1 %or.cond, label %._crit_edge64, label %.preheader58.us

.preheader58.us:                                  ; preds = %.preheader59, %._crit_edge.us
  %.05063.us = phi i32 [ %75, %._crit_edge.us ], [ 0, %.preheader59 ]
  br label %25

25:                                               ; preds = %.preheader58.us, %.preheader.us
  %.05162.us = phi i32 [ 0, %.preheader58.us ], [ %74, %.preheader.us ]
  %26 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv)
  %27 = invoke noundef nonnull align 4 dereferenceable(17) ptr @_ZN6basisu8vector2DINS_13encoder_blockEEclEjj(ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %.05162.us, i32 noundef %.05063.us)
          to label %28 unwind label %.split.us

28:                                               ; preds = %25
  %29 = invoke noundef ptr @_ZN6basisu9gpu_image13get_block_ptrEjjj(ptr noundef nonnull align 8 dereferenceable(48) %2, i32 noundef %.05162.us, i32 noundef %.05063.us, i32 noundef 0)
          to label %30 unwind label %.split66.us

30:                                               ; preds = %28
  call void @_ZN6basisu9etc_block12set_diff_bitEb(ptr noundef nonnull align 8 dereferenceable(8) %29, i1 noundef zeroext true)
  call void @_ZN6basisu9etc_block12set_flip_bitEb(ptr noundef nonnull align 8 dereferenceable(8) %29, i1 noundef zeroext true)
  %31 = getelementptr inbounds i8, ptr %27, i64 4
  %32 = load i32, ptr %31, align 4, !tbaa !14
  %33 = zext i32 %32 to i64
  %34 = call noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %33)
  invoke void @_ZN6basisu9etc_block22set_block_color5_etc1sERKNS_10color_rgbaE(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 1 dereferenceable(4) %34)
          to label %.preheader.us unwind label %.split69.us

.preheader.us:                                    ; preds = %30
  %35 = call noundef nonnull align 4 dereferenceable(9) ptr @_ZN6basisu6vectorINS_27etc1_endpoint_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %33)
  %36 = getelementptr inbounds i8, ptr %35, i64 4
  %37 = load i32, ptr %36, align 4, !tbaa !16
  call void @_ZN6basisu9etc_block22set_inten_tables_etc1sEj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef %37)
  %38 = getelementptr inbounds i8, ptr %27, i64 8
  %39 = load i32, ptr %38, align 4, !tbaa !19
  %40 = zext i32 %39 to i64
  %41 = call noundef nonnull align 1 dereferenceable(16) ptr @_ZN6basisu6vectorIN6basist27etc1_selector_palette_entryEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %40)
  %42 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 0, i32 noundef 0)
  %43 = zext i8 %42 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 0, i32 noundef 0, i32 noundef %43)
  %44 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 1, i32 noundef 0)
  %45 = zext i8 %44 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 1, i32 noundef 0, i32 noundef %45)
  %46 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 2, i32 noundef 0)
  %47 = zext i8 %46 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 2, i32 noundef 0, i32 noundef %47)
  %48 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 3, i32 noundef 0)
  %49 = zext i8 %48 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 3, i32 noundef 0, i32 noundef %49)
  %50 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 0, i32 noundef 1)
  %51 = zext i8 %50 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 0, i32 noundef 1, i32 noundef %51)
  %52 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 1, i32 noundef 1)
  %53 = zext i8 %52 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 1, i32 noundef 1, i32 noundef %53)
  %54 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 2, i32 noundef 1)
  %55 = zext i8 %54 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 2, i32 noundef 1, i32 noundef %55)
  %56 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 3, i32 noundef 1)
  %57 = zext i8 %56 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 3, i32 noundef 1, i32 noundef %57)
  %58 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 0, i32 noundef 2)
  %59 = zext i8 %58 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 0, i32 noundef 2, i32 noundef %59)
  %60 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 1, i32 noundef 2)
  %61 = zext i8 %60 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 1, i32 noundef 2, i32 noundef %61)
  %62 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 2, i32 noundef 2)
  %63 = zext i8 %62 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 2, i32 noundef 2, i32 noundef %63)
  %64 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 3, i32 noundef 2)
  %65 = zext i8 %64 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 3, i32 noundef 2, i32 noundef %65)
  %66 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 0, i32 noundef 3)
  %67 = zext i8 %66 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 0, i32 noundef 3, i32 noundef %67)
  %68 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 1, i32 noundef 3)
  %69 = zext i8 %68 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 1, i32 noundef 3, i32 noundef %69)
  %70 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 2, i32 noundef 3)
  %71 = zext i8 %70 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 2, i32 noundef 3, i32 noundef %71)
  %72 = call noundef zeroext i8 @_ZNK6basist27etc1_selector_palette_entryclEjj(ptr noundef nonnull align 1 dereferenceable(16) %41, i32 noundef 3, i32 noundef 3)
  %73 = zext i8 %72 to i32
  call void @_ZN6basisu9etc_block12set_selectorEjjj(ptr noundef nonnull align 8 dereferenceable(8) %29, i32 noundef 3, i32 noundef 3, i32 noundef %73)
  %74 = add nuw i32 %.05162.us, 1
  %exitcond.not = icmp eq i32 %74, %21
  br i1 %exitcond.not, label %._crit_edge.us, label %25, !llvm.loop !20

._crit_edge.us:                                   ; preds = %.preheader.us
  %75 = add nuw i32 %.05063.us, 1
  %exitcond75.not = icmp eq i32 %75, %24
  br i1 %exitcond75.not, label %._crit_edge64, label %.preheader58.us, !llvm.loop !22

.split.us:                                        ; preds = %25
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %110

.split66.us:                                      ; preds = %28
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %110

.split69.us:                                      ; preds = %30
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %110

._crit_edge64:                                    ; preds = %._crit_edge.us, %.preheader59
  %79 = call noundef ptr @_ZN6basisu9gpu_image7get_ptrEv(ptr noundef nonnull align 8 dereferenceable(48) %2)
  %80 = invoke noundef i32 @_ZNK6basisu9gpu_image17get_size_in_bytesEv(ptr noundef nonnull align 8 dereferenceable(48) %2)
          to label %83 unwind label %81

81:                                               ; preds = %83, %._crit_edge64, %12
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %110

83:                                               ; preds = %._crit_edge64
  %84 = zext i32 %80 to i64
  %85 = invoke noundef zeroext i16 @_ZN6basist5crc16EPKvmt(ptr noundef %79, i64 noundef %84, i16 noundef zeroext 0)
          to label %86 unwind label %81

86:                                               ; preds = %83
  %87 = call noundef nonnull align 2 dereferenceable(2) ptr @_ZN6basisu6vectorItEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %indvars.iv)
  store i16 %85, ptr %87, align 2, !tbaa !23
  %88 = load i8, ptr %11, align 2, !tbaa !25, !range !42, !noundef !43
  %89 = trunc nuw i8 %88 to i1
  br i1 %89, label %90, label %106

90:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #7
  invoke void @_ZN6basisu5imageC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3)
          to label %91 unwind label %98

91:                                               ; preds = %90
  %92 = invoke noundef zeroext i1 @_ZNK6basisu9gpu_image6unpackERNS_5imageE(ptr noundef nonnull align 8 dereferenceable(48) %2, ptr noundef nonnull align 8 dereferenceable(32) %3)
          to label %93 unwind label %100

93:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #7
  %94 = trunc nuw i64 %indvars.iv to i32
  %95 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %4, i64 noundef 256, ptr noundef nonnull @.str.10, i32 noundef %94) #7
  %96 = invoke noundef zeroext i1 @_ZN6basisu8save_pngEPKcRKNS_5imageEjj(ptr noundef nonnull %4, ptr noundef nonnull align 8 dereferenceable(32) %3, i32 noundef 0, i32 noundef 0)
          to label %97 unwind label %102

97:                                               ; preds = %93
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #7
  call void @_ZN6basisu5imageD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #7
  br label %106

98:                                               ; preds = %90
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %105

100:                                              ; preds = %91
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %104

102:                                              ; preds = %93
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #7
  br label %104

104:                                              ; preds = %102, %100
  %.pn = phi { ptr, i32 } [ %103, %102 ], [ %101, %100 ]
  call void @_ZN6basisu5imageD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  br label %105

105:                                              ; preds = %104, %98
  %.pn.pn = phi { ptr, i32 } [ %.pn, %104 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #7
  br label %110

106:                                              ; preds = %97, %86
  call void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %2) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %2) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %107 = call noundef i32 @_ZNK6basisu6vectorINS_25basisu_backend_slice_descEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %108 = zext i32 %107 to i64
  %109 = icmp ult i64 %indvars.iv.next, %108
  br i1 %109, label %12, label %._crit_edge, !llvm.loop !44

110:                                              ; preds = %.split.us, %.split69.us, %.split66.us, %105, %81
  %.pn54.pn.pn = phi { ptr, i32 } [ %.pn.pn, %105 ], [ %82, %81 ], [ %76, %.split.us ], [ %78, %.split69.us ], [ %77, %.split66.us ]
  call void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %2) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %2) #7
  resume { ptr, i32 } %.pn54.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6basisu9gpu_image4initENS_14texture_formatEjj(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

declare noundef zeroext i16 @_ZN6basist5crc16EPKvmt(ptr noundef, i64 noundef, i16 noundef zeroext) local_unnamed_addr #5

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

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

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

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

declare noundef zeroext i1 @_ZNK6basisu9gpu_image6unpackERNS_5imageE(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

declare noundef zeroext i1 @_ZN6basisu8save_pngEPKcRKNS_5imageEjj(ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) local_unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6basisu9gpu_imageD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nofree 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 #7 = { 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 12}
!6 = !{!"_ZTSN6basisu25basisu_backend_slice_descE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !10, i64 44, !10, i64 45}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!6, !7, i64 16}
!12 = !{!6, !7, i64 20}
!13 = !{!6, !7, i64 24}
!14 = !{!15, !7, i64 4}
!15 = !{!"_ZTSN6basisu13encoder_blockE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16}
!16 = !{!17, !7, i64 4}
!17 = !{!"_ZTSN6basisu27etc1_endpoint_palette_entryE", !18, i64 0, !7, i64 4, !10, i64 8}
!18 = !{!"_ZTSN6basisu10color_rgbaE", !8, i64 0}
!19 = !{!15, !7, i64 8}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = !{!24, !24, i64 0}
!24 = !{!"short", !8, i64 0}
!25 = !{!26, !10, i64 10}
!26 = !{!"_ZTSN6basisu14basisu_backendE", !27, i64 0, !28, i64 8, !30, i64 40, !31, i64 56, !27, i64 168, !36, i64 176, !37, i64 192, !38, i64 208, !39, i64 224, !40, i64 240, !40, i64 256, !41, i64 272, !41, i64 288, !40, i64 304, !40, i64 320}
!27 = !{!"any pointer", !8, i64 0}
!28 = !{!"_ZTSN6basisu21basisu_backend_paramsE", !10, i64 0, !10, i64 1, !10, i64 2, !29, i64 4, !29, i64 8, !7, i64 12, !10, i64 16, !7, i64 20, !7, i64 24, !10, i64 28, !10, i64 29}
!29 = !{!"float", !8, i64 0}
!30 = !{!"_ZTSN6basisu6vectorINS_25basisu_backend_slice_descEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!31 = !{!"_ZTSN6basisu21basisu_backend_outputE", !32, i64 0, !10, i64 4, !10, i64 5, !10, i64 6, !7, i64 8, !7, i64 12, !33, i64 16, !33, i64 32, !30, i64 48, !33, i64 64, !34, i64 80, !35, i64 96}
!32 = !{!"_ZTSN6basist16basis_tex_formatE", !8, i64 0}
!33 = !{!"_ZTSN6basisu6vectorIhEE", !27, i64 0, !7, i64 8, !7, i64 12}
!34 = !{!"_ZTSN6basisu6vectorINS0_IhEEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!35 = !{!"_ZTSN6basisu6vectorItEE", !27, i64 0, !7, i64 8, !7, i64 12}
!36 = !{!"_ZTSN6basisu6vectorINS_27etc1_endpoint_palette_entryEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!37 = !{!"_ZTSN6basisu6vectorIN6basist27etc1_selector_palette_entryEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!38 = !{!"_ZTSN6basisu6vectorINS_14basisu_backend34etc1_global_selector_cb_entry_descEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!39 = !{!"_ZTSN6basisu6vectorINS_8vector2DINS_13encoder_blockEEEEE", !27, i64 0, !7, i64 8, !7, i64 12}
!40 = !{!"_ZTSN6basisu6vectorIjEE", !27, i64 0, !7, i64 8, !7, i64 12}
!41 = !{!"_ZTSN6basisu6vectorIbEE", !27, i64 0, !7, i64 8, !7, i64 12}
!42 = !{i8 0, i8 2}
!43 = !{}
!44 = distinct !{!44, !21}


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