; LLVM IR from ggml-org/ggml :: src (ggml-quants)

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

%struct.block_q2_K = type { [16 x i8], [64 x i8], %union.anon.4 }
%union.anon.4 = type { i32 }
%struct.anon.5 = type { i16, i16 }

@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [14 x i8], align 1
@__PRETTY_FUNCTION__.quantize_row_q2_K_ref = external hidden unnamed_addr constant [81 x i8], align 1

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #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 nounwind uwtable
declare hidden zeroext i16 @ggml_compute_fp32_to_fp16(float noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext) #3

; Function Attrs: nounwind uwtable
define dso_local void @quantize_row_q2_K_ref(ptr noalias noundef %0, ptr noalias noundef %1, i64 noundef %2) #4 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca [256 x i8], align 16
  %9 = alloca [16 x i8], align 16
  %10 = alloca [16 x float], align 16
  %11 = alloca [16 x float], align 16
  %12 = alloca [16 x float], align 16
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca float, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i64 %2, ptr %6, align 8, !tbaa !9
  %36 = load i64, ptr %6, align 8, !tbaa !9
  %37 = srem i64 %36, 256
  %38 = icmp eq i64 %37, 0
  br i1 %38, label %39, label %40

39:                                               ; preds = %3
  br label %41

40:                                               ; preds = %3
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 643, ptr noundef @__PRETTY_FUNCTION__.quantize_row_q2_K_ref) #5
  unreachable

41:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %42 = load i64, ptr %6, align 8, !tbaa !9
  %43 = sdiv i64 %42, 256
  %44 = trunc i64 %43 to i32
  store i32 %44, ptr %7, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store float 1.500000e+01, ptr %13, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %45

45:                                               ; preds = %415, %41
  %46 = load i32, ptr %14, align 4, !tbaa !11
  %47 = load i32, ptr %7, align 4, !tbaa !11
  %48 = icmp slt i32 %46, %47
  br i1 %48, label %50, label %49

49:                                               ; preds = %45
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %418

50:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store float 0.000000e+00, ptr %16, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store float 0.000000e+00, ptr %17, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %51

51:                                               ; preds = %116, %50
  %52 = load i32, ptr %18, align 4, !tbaa !11
  %53 = icmp slt i32 %52, 16
  br i1 %53, label %55, label %54

54:                                               ; preds = %51
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %119

55:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !11
  br label %56

56:                                               ; preds = %73, %55
  %57 = load i32, ptr %19, align 4, !tbaa !11
  %58 = icmp slt i32 %57, 16
  br i1 %58, label %60, label %59

59:                                               ; preds = %56
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %76

60:                                               ; preds = %56
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = load i32, ptr %18, align 4, !tbaa !11
  %63 = mul nsw i32 16, %62
  %64 = load i32, ptr %19, align 4, !tbaa !11
  %65 = add nsw i32 %63, %64
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds float, ptr %61, i64 %66
  %68 = load float, ptr %67, align 4, !tbaa !13
  %69 = call float @llvm.fabs.f32(float %68)
  %70 = load i32, ptr %19, align 4, !tbaa !11
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds [16 x float], ptr %10, i64 0, i64 %71
  store float %69, ptr %72, align 4, !tbaa !13
  br label %73

73:                                               ; preds = %60
  %74 = load i32, ptr %19, align 4, !tbaa !11
  %75 = add nsw i32 %74, 1
  store i32 %75, ptr %19, align 4, !tbaa !11
  br label %56, !llvm.loop !15

76:                                               ; preds = %59
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = load i32, ptr %18, align 4, !tbaa !11
  %79 = mul nsw i32 16, %78
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds float, ptr %77, i64 %80
  %82 = getelementptr inbounds [16 x float], ptr %10, i64 0, i64 0
  %83 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 0
  %84 = load i32, ptr %18, align 4, !tbaa !11
  %85 = mul nsw i32 16, %84
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i8, ptr %83, i64 %86
  %88 = load i32, ptr %18, align 4, !tbaa !11
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %89
  %91 = getelementptr inbounds [16 x i8], ptr %9, i64 0, i64 0
  %92 = call float @make_qkx2_quants(i32 noundef 16, i32 noundef 3, ptr noundef %81, ptr noundef %82, ptr noundef %87, ptr noundef %90, ptr noundef %91, float noundef -5.000000e-01, float noundef 0x3FB99999A0000000, i32 noundef 15, i1 noundef zeroext true)
  %93 = load i32, ptr %18, align 4, !tbaa !11
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [16 x float], ptr %12, i64 0, i64 %94
  store float %92, ptr %95, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %96 = load i32, ptr %18, align 4, !tbaa !11
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds [16 x float], ptr %12, i64 0, i64 %97
  %99 = load float, ptr %98, align 4, !tbaa !13
  store float %99, ptr %20, align 4, !tbaa !13
  %100 = load float, ptr %20, align 4, !tbaa !13
  %101 = load float, ptr %16, align 4, !tbaa !13
  %102 = fcmp ogt float %100, %101
  br i1 %102, label %103, label %105

103:                                              ; preds = %76
  %104 = load float, ptr %20, align 4, !tbaa !13
  store float %104, ptr %16, align 4, !tbaa !13
  br label %105

105:                                              ; preds = %103, %76
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %106 = load i32, ptr %18, align 4, !tbaa !11
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %107
  %109 = load float, ptr %108, align 4, !tbaa !13
  store float %109, ptr %21, align 4, !tbaa !13
  %110 = load float, ptr %21, align 4, !tbaa !13
  %111 = load float, ptr %17, align 4, !tbaa !13
  %112 = fcmp ogt float %110, %111
  br i1 %112, label %113, label %115

113:                                              ; preds = %105
  %114 = load float, ptr %21, align 4, !tbaa !13
  store float %114, ptr %17, align 4, !tbaa !13
  br label %115

115:                                              ; preds = %113, %105
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %116

116:                                              ; preds = %115
  %117 = load i32, ptr %18, align 4, !tbaa !11
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr %18, align 4, !tbaa !11
  br label %51, !llvm.loop !17

119:                                              ; preds = %54
  %120 = load float, ptr %16, align 4, !tbaa !13
  %121 = fcmp ogt float %120, 0.000000e+00
  br i1 %121, label %122, label %160

122:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %123 = load float, ptr %16, align 4, !tbaa !13
  %124 = fdiv float 1.500000e+01, %123
  store float %124, ptr %22, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !11
  br label %125

125:                                              ; preds = %147, %122
  %126 = load i32, ptr %23, align 4, !tbaa !11
  %127 = icmp slt i32 %126, 16
  br i1 %127, label %129, label %128

128:                                              ; preds = %125
  store i32 11, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %150

129:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %130 = load float, ptr %22, align 4, !tbaa !13
  %131 = load i32, ptr %23, align 4, !tbaa !11
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [16 x float], ptr %12, i64 0, i64 %132
  %134 = load float, ptr %133, align 4, !tbaa !13
  %135 = fmul float %130, %134
  %136 = call i32 @nearest_int(float noundef %135)
  store i32 %136, ptr %24, align 4, !tbaa !11
  %137 = load i32, ptr %24, align 4, !tbaa !11
  %138 = trunc i32 %137 to i8
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = load i32, ptr %14, align 4, !tbaa !11
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds %struct.block_q2_K, ptr %139, i64 %141
  %143 = getelementptr inbounds %struct.block_q2_K, ptr %142, i32 0, i32 0
  %144 = load i32, ptr %23, align 4, !tbaa !11
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [16 x i8], ptr %143, i64 0, i64 %145
  store i8 %138, ptr %146, align 1, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %147

147:                                              ; preds = %129
  %148 = load i32, ptr %23, align 4, !tbaa !11
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %23, align 4, !tbaa !11
  br label %125, !llvm.loop !19

150:                                              ; preds = %128
  %151 = load float, ptr %16, align 4, !tbaa !13
  %152 = fdiv float %151, 1.500000e+01
  %153 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef %152)
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = load i32, ptr %14, align 4, !tbaa !11
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds %struct.block_q2_K, ptr %154, i64 %156
  %158 = getelementptr inbounds %struct.block_q2_K, ptr %157, i32 0, i32 2
  %159 = getelementptr inbounds %struct.anon.5, ptr %158, i32 0, i32 0
  store i16 %153, ptr %159, align 4, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %185

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

161:                                              ; preds = %174, %160
  %162 = load i32, ptr %25, align 4, !tbaa !11
  %163 = icmp slt i32 %162, 16
  br i1 %163, label %165, label %164

164:                                              ; preds = %161
  store i32 14, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %177

165:                                              ; preds = %161
  %166 = load ptr, ptr %5, align 8, !tbaa !5
  %167 = load i32, ptr %14, align 4, !tbaa !11
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds %struct.block_q2_K, ptr %166, i64 %168
  %170 = getelementptr inbounds %struct.block_q2_K, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %25, align 4, !tbaa !11
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [16 x i8], ptr %170, i64 0, i64 %172
  store i8 0, ptr %173, align 1, !tbaa !18
  br label %174

174:                                              ; preds = %165
  %175 = load i32, ptr %25, align 4, !tbaa !11
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %25, align 4, !tbaa !11
  br label %161, !llvm.loop !20

177:                                              ; preds = %164
  %178 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef 0.000000e+00)
  %179 = load ptr, ptr %5, align 8, !tbaa !5
  %180 = load i32, ptr %14, align 4, !tbaa !11
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds %struct.block_q2_K, ptr %179, i64 %181
  %183 = getelementptr inbounds %struct.block_q2_K, ptr %182, i32 0, i32 2
  %184 = getelementptr inbounds %struct.anon.5, ptr %183, i32 0, i32 0
  store i16 %178, ptr %184, align 4, !tbaa !18
  br label %185

185:                                              ; preds = %177, %150
  %186 = load float, ptr %17, align 4, !tbaa !13
  %187 = fcmp ogt float %186, 0.000000e+00
  br i1 %187, label %188, label %230

188:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %189 = load float, ptr %17, align 4, !tbaa !13
  %190 = fdiv float 1.500000e+01, %189
  store float %190, ptr %26, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !11
  br label %191

191:                                              ; preds = %217, %188
  %192 = load i32, ptr %27, align 4, !tbaa !11
  %193 = icmp slt i32 %192, 16
  br i1 %193, label %195, label %194

194:                                              ; preds = %191
  store i32 17, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %220

195:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %196 = load float, ptr %26, align 4, !tbaa !13
  %197 = load i32, ptr %27, align 4, !tbaa !11
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds [16 x float], ptr %11, i64 0, i64 %198
  %200 = load float, ptr %199, align 4, !tbaa !13
  %201 = fmul float %196, %200
  %202 = call i32 @nearest_int(float noundef %201)
  store i32 %202, ptr %28, align 4, !tbaa !11
  %203 = load i32, ptr %28, align 4, !tbaa !11
  %204 = shl i32 %203, 4
  %205 = load ptr, ptr %5, align 8, !tbaa !5
  %206 = load i32, ptr %14, align 4, !tbaa !11
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds %struct.block_q2_K, ptr %205, i64 %207
  %209 = getelementptr inbounds %struct.block_q2_K, ptr %208, i32 0, i32 0
  %210 = load i32, ptr %27, align 4, !tbaa !11
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds [16 x i8], ptr %209, i64 0, i64 %211
  %213 = load i8, ptr %212, align 1, !tbaa !18
  %214 = zext i8 %213 to i32
  %215 = or i32 %214, %204
  %216 = trunc i32 %215 to i8
  store i8 %216, ptr %212, align 1, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %217

217:                                              ; preds = %195
  %218 = load i32, ptr %27, align 4, !tbaa !11
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %27, align 4, !tbaa !11
  br label %191, !llvm.loop !21

220:                                              ; preds = %194
  %221 = load float, ptr %17, align 4, !tbaa !13
  %222 = fdiv float %221, 1.500000e+01
  %223 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef %222)
  %224 = load ptr, ptr %5, align 8, !tbaa !5
  %225 = load i32, ptr %14, align 4, !tbaa !11
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds %struct.block_q2_K, ptr %224, i64 %226
  %228 = getelementptr inbounds %struct.block_q2_K, ptr %227, i32 0, i32 2
  %229 = getelementptr inbounds %struct.anon.5, ptr %228, i32 0, i32 1
  store i16 %223, ptr %229, align 2, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %238

230:                                              ; preds = %185
  %231 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef 0.000000e+00)
  %232 = load ptr, ptr %5, align 8, !tbaa !5
  %233 = load i32, ptr %14, align 4, !tbaa !11
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.block_q2_K, ptr %232, i64 %234
  %236 = getelementptr inbounds %struct.block_q2_K, ptr %235, i32 0, i32 2
  %237 = getelementptr inbounds %struct.anon.5, ptr %236, i32 0, i32 1
  store i16 %231, ptr %237, align 2, !tbaa !18
  br label %238

238:                                              ; preds = %230, %220
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  store i32 0, ptr %29, align 4, !tbaa !11
  br label %239

239:                                              ; preds = %342, %238
  %240 = load i32, ptr %29, align 4, !tbaa !11
  %241 = icmp slt i32 %240, 16
  br i1 %241, label %243, label %242

242:                                              ; preds = %239
  store i32 20, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %345

243:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = load i32, ptr %14, align 4, !tbaa !11
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds %struct.block_q2_K, ptr %244, i64 %246
  %248 = getelementptr inbounds %struct.block_q2_K, ptr %247, i32 0, i32 2
  %249 = getelementptr inbounds %struct.anon.5, ptr %248, i32 0, i32 0
  %250 = load i16, ptr %249, align 4, !tbaa !18
  %251 = call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %250)
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = load i32, ptr %14, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds %struct.block_q2_K, ptr %252, i64 %254
  %256 = getelementptr inbounds %struct.block_q2_K, ptr %255, i32 0, i32 0
  %257 = load i32, ptr %29, align 4, !tbaa !11
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [16 x i8], ptr %256, i64 0, i64 %258
  %260 = load i8, ptr %259, align 1, !tbaa !18
  %261 = zext i8 %260 to i32
  %262 = and i32 %261, 15
  %263 = sitofp i32 %262 to float
  %264 = fmul float %251, %263
  store float %264, ptr %30, align 4, !tbaa !13
  %265 = load float, ptr %30, align 4, !tbaa !13
  %266 = fcmp une float %265, 0.000000e+00
  br i1 %266, label %268, label %267

267:                                              ; preds = %243
  store i32 22, ptr %15, align 4
  br label %339

268:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = load i32, ptr %14, align 4, !tbaa !11
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds %struct.block_q2_K, ptr %269, i64 %271
  %273 = getelementptr inbounds %struct.block_q2_K, ptr %272, i32 0, i32 2
  %274 = getelementptr inbounds %struct.anon.5, ptr %273, i32 0, i32 1
  %275 = load i16, ptr %274, align 2, !tbaa !18
  %276 = call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %275)
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = load i32, ptr %14, align 4, !tbaa !11
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds %struct.block_q2_K, ptr %277, i64 %279
  %281 = getelementptr inbounds %struct.block_q2_K, ptr %280, i32 0, i32 0
  %282 = load i32, ptr %29, align 4, !tbaa !11
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [16 x i8], ptr %281, i64 0, i64 %283
  %285 = load i8, ptr %284, align 1, !tbaa !18
  %286 = zext i8 %285 to i32
  %287 = ashr i32 %286, 4
  %288 = sitofp i32 %287 to float
  %289 = fmul float %276, %288
  store float %289, ptr %31, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %290

290:                                              ; preds = %335, %268
  %291 = load i32, ptr %32, align 4, !tbaa !11
  %292 = icmp slt i32 %291, 16
  br i1 %292, label %294, label %293

293:                                              ; preds = %290
  store i32 23, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %338

294:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %295 = load ptr, ptr %4, align 8, !tbaa !5
  %296 = load i32, ptr %29, align 4, !tbaa !11
  %297 = mul nsw i32 16, %296
  %298 = load i32, ptr %32, align 4, !tbaa !11
  %299 = add nsw i32 %297, %298
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds float, ptr %295, i64 %300
  %302 = load float, ptr %301, align 4, !tbaa !13
  %303 = load float, ptr %31, align 4, !tbaa !13
  %304 = fadd float %302, %303
  %305 = load float, ptr %30, align 4, !tbaa !13
  %306 = fdiv float %304, %305
  %307 = call i32 @nearest_int(float noundef %306)
  store i32 %307, ptr %33, align 4, !tbaa !11
  %308 = load i32, ptr %33, align 4, !tbaa !11
  %309 = icmp slt i32 3, %308
  br i1 %309, label %310, label %311

310:                                              ; preds = %294
  br label %313

311:                                              ; preds = %294
  %312 = load i32, ptr %33, align 4, !tbaa !11
  br label %313

313:                                              ; preds = %311, %310
  %314 = phi i32 [ 3, %310 ], [ %312, %311 ]
  %315 = icmp sgt i32 0, %314
  br i1 %315, label %316, label %317

316:                                              ; preds = %313
  br label %325

317:                                              ; preds = %313
  %318 = load i32, ptr %33, align 4, !tbaa !11
  %319 = icmp slt i32 3, %318
  br i1 %319, label %320, label %321

320:                                              ; preds = %317
  br label %323

321:                                              ; preds = %317
  %322 = load i32, ptr %33, align 4, !tbaa !11
  br label %323

323:                                              ; preds = %321, %320
  %324 = phi i32 [ 3, %320 ], [ %322, %321 ]
  br label %325

325:                                              ; preds = %323, %316
  %326 = phi i32 [ 0, %316 ], [ %324, %323 ]
  store i32 %326, ptr %33, align 4, !tbaa !11
  %327 = load i32, ptr %33, align 4, !tbaa !11
  %328 = trunc i32 %327 to i8
  %329 = load i32, ptr %29, align 4, !tbaa !11
  %330 = mul nsw i32 16, %329
  %331 = load i32, ptr %32, align 4, !tbaa !11
  %332 = add nsw i32 %330, %331
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %333
  store i8 %328, ptr %334, align 1, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %335

335:                                              ; preds = %325
  %336 = load i32, ptr %32, align 4, !tbaa !11
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %32, align 4, !tbaa !11
  br label %290, !llvm.loop !22

338:                                              ; preds = %293
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  store i32 0, ptr %15, align 4
  br label %339

339:                                              ; preds = %338, %267
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  %340 = load i32, ptr %15, align 4
  switch i32 %340, label %419 [
    i32 0, label %341
    i32 22, label %342
  ]

341:                                              ; preds = %339
  br label %342

342:                                              ; preds = %341, %339
  %343 = load i32, ptr %29, align 4, !tbaa !11
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %29, align 4, !tbaa !11
  br label %239, !llvm.loop !23

345:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  store i32 0, ptr %34, align 4, !tbaa !11
  br label %346

346:                                              ; preds = %409, %345
  %347 = load i32, ptr %34, align 4, !tbaa !11
  %348 = icmp slt i32 %347, 256
  br i1 %348, label %350, label %349

349:                                              ; preds = %346
  store i32 26, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  br label %412

350:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 0, ptr %35, align 4, !tbaa !11
  br label %351

351:                                              ; preds = %405, %350
  %352 = load i32, ptr %35, align 4, !tbaa !11
  %353 = icmp slt i32 %352, 32
  br i1 %353, label %355, label %354

354:                                              ; preds = %351
  store i32 29, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %408

355:                                              ; preds = %351
  %356 = load i32, ptr %34, align 4, !tbaa !11
  %357 = load i32, ptr %35, align 4, !tbaa !11
  %358 = add nsw i32 %356, %357
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %359
  %361 = load i8, ptr %360, align 1, !tbaa !18
  %362 = zext i8 %361 to i32
  %363 = load i32, ptr %34, align 4, !tbaa !11
  %364 = load i32, ptr %35, align 4, !tbaa !11
  %365 = add nsw i32 %363, %364
  %366 = add nsw i32 %365, 32
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %367
  %369 = load i8, ptr %368, align 1, !tbaa !18
  %370 = zext i8 %369 to i32
  %371 = shl i32 %370, 2
  %372 = or i32 %362, %371
  %373 = load i32, ptr %34, align 4, !tbaa !11
  %374 = load i32, ptr %35, align 4, !tbaa !11
  %375 = add nsw i32 %373, %374
  %376 = add nsw i32 %375, 64
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %377
  %379 = load i8, ptr %378, align 1, !tbaa !18
  %380 = zext i8 %379 to i32
  %381 = shl i32 %380, 4
  %382 = or i32 %372, %381
  %383 = load i32, ptr %34, align 4, !tbaa !11
  %384 = load i32, ptr %35, align 4, !tbaa !11
  %385 = add nsw i32 %383, %384
  %386 = add nsw i32 %385, 96
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !18
  %390 = zext i8 %389 to i32
  %391 = shl i32 %390, 6
  %392 = or i32 %382, %391
  %393 = trunc i32 %392 to i8
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = load i32, ptr %14, align 4, !tbaa !11
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds %struct.block_q2_K, ptr %394, i64 %396
  %398 = getelementptr inbounds %struct.block_q2_K, ptr %397, i32 0, i32 1
  %399 = load i32, ptr %34, align 4, !tbaa !11
  %400 = sdiv i32 %399, 4
  %401 = load i32, ptr %35, align 4, !tbaa !11
  %402 = add nsw i32 %400, %401
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds [64 x i8], ptr %398, i64 0, i64 %403
  store i8 %393, ptr %404, align 1, !tbaa !18
  br label %405

405:                                              ; preds = %355
  %406 = load i32, ptr %35, align 4, !tbaa !11
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %35, align 4, !tbaa !11
  br label %351, !llvm.loop !24

408:                                              ; preds = %354
  br label %409

409:                                              ; preds = %408
  %410 = load i32, ptr %34, align 4, !tbaa !11
  %411 = add nsw i32 %410, 128
  store i32 %411, ptr %34, align 4, !tbaa !11
  br label %346, !llvm.loop !25

412:                                              ; preds = %349
  %413 = load ptr, ptr %4, align 8, !tbaa !5
  %414 = getelementptr inbounds float, ptr %413, i64 256
  store ptr %414, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %415

415:                                              ; preds = %412
  %416 = load i32, ptr %14, align 4, !tbaa !11
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %14, align 4, !tbaa !11
  br label %45, !llvm.loop !26

418:                                              ; preds = %49
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 256, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  ret void

419:                                              ; preds = %339
  unreachable
}

; Function Attrs: nounwind uwtable
declare hidden float @make_qkx2_quants(i32 noundef, i32 noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, float noundef, float noundef, i32 noundef, i1 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @nearest_int(float noundef) #3

attributes #0 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind }
attributes #6 = { nounwind }

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

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


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

%struct.block_q2_K = type { [16 x i8], [64 x i8], %union.anon.4 }
%union.anon.4 = type { i32 }

@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [14 x i8], align 1
@__PRETTY_FUNCTION__.quantize_row_q2_K_ref = external hidden unnamed_addr constant [81 x i8], align 1

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

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

; 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 nounwind uwtable
declare hidden zeroext i16 @ggml_compute_fp32_to_fp16(float noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @quantize_row_q2_K_ref(ptr noalias noundef %0, ptr noalias nocapture noundef %1, i64 noundef %2) local_unnamed_addr #3 {
  %4 = alloca [256 x i8], align 16
  %5 = alloca [16 x i8], align 16
  %6 = alloca [16 x float], align 16
  %7 = alloca [16 x float], align 16
  %8 = alloca [16 x float], align 16
  %9 = and i64 %2, 255
  %10 = icmp eq i64 %9, 0
  br i1 %10, label %12, label %11

11:                                               ; preds = %3
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 643, ptr noundef nonnull @__PRETTY_FUNCTION__.quantize_row_q2_K_ref) #6
  unreachable

12:                                               ; preds = %3
  %13 = lshr exact i64 %2, 8
  %14 = trunc i64 %13 to i32
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #7
  %invariant.gep = getelementptr inbounds i8, ptr %1, i64 2
  %15 = icmp sgt i32 %14, 0
  br i1 %15, label %.preheader123.preheader, label %._crit_edge

.preheader123.preheader:                          ; preds = %12
  %wide.trip.count = and i64 %13, 2147483647
  %16 = getelementptr inbounds i8, ptr %6, i64 16
  %17 = getelementptr inbounds i8, ptr %6, i64 32
  %18 = getelementptr inbounds i8, ptr %6, i64 48
  %19 = getelementptr inbounds i8, ptr %8, i64 4
  %20 = getelementptr inbounds i8, ptr %8, i64 8
  %21 = getelementptr inbounds i8, ptr %8, i64 12
  %22 = getelementptr inbounds i8, ptr %8, i64 16
  %23 = getelementptr inbounds i8, ptr %8, i64 20
  %24 = getelementptr inbounds i8, ptr %8, i64 24
  %25 = getelementptr inbounds i8, ptr %8, i64 28
  %26 = getelementptr inbounds i8, ptr %8, i64 32
  %27 = getelementptr inbounds i8, ptr %8, i64 36
  %28 = getelementptr inbounds i8, ptr %8, i64 40
  %29 = getelementptr inbounds i8, ptr %8, i64 44
  %30 = getelementptr inbounds i8, ptr %8, i64 48
  %31 = getelementptr inbounds i8, ptr %8, i64 52
  %32 = getelementptr inbounds i8, ptr %8, i64 56
  %33 = getelementptr inbounds i8, ptr %8, i64 60
  %34 = getelementptr inbounds i8, ptr %7, i64 4
  %35 = getelementptr inbounds i8, ptr %7, i64 8
  %36 = getelementptr inbounds i8, ptr %7, i64 12
  %37 = getelementptr inbounds i8, ptr %7, i64 16
  %38 = getelementptr inbounds i8, ptr %7, i64 20
  %39 = getelementptr inbounds i8, ptr %7, i64 24
  %40 = getelementptr inbounds i8, ptr %7, i64 28
  %41 = getelementptr inbounds i8, ptr %7, i64 32
  %42 = getelementptr inbounds i8, ptr %7, i64 36
  %43 = getelementptr inbounds i8, ptr %7, i64 40
  %44 = getelementptr inbounds i8, ptr %7, i64 44
  %45 = getelementptr inbounds i8, ptr %7, i64 48
  %46 = getelementptr inbounds i8, ptr %7, i64 52
  %47 = getelementptr inbounds i8, ptr %7, i64 56
  %48 = getelementptr inbounds i8, ptr %7, i64 60
  %49 = getelementptr inbounds i8, ptr %4, i64 16
  %50 = getelementptr inbounds i8, ptr %4, i64 32
  %51 = getelementptr inbounds i8, ptr %4, i64 48
  %52 = getelementptr inbounds i8, ptr %4, i64 64
  %53 = getelementptr inbounds i8, ptr %4, i64 80
  %54 = getelementptr inbounds i8, ptr %4, i64 96
  %55 = getelementptr inbounds i8, ptr %4, i64 112
  br label %.preheader123

.preheader123:                                    ; preds = %.preheader123.preheader, %463
  %indvar = phi i64 [ 0, %.preheader123.preheader ], [ %indvar.next, %463 ]
  %.0105138 = phi ptr [ %0, %.preheader123.preheader ], [ %464, %463 ]
  %56 = mul nuw nsw i64 %indvar, 84
  %scevgep = getelementptr i8, ptr %1, i64 %56
  br label %.preheader120

._crit_edge:                                      ; preds = %463, %12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #7
  ret void

.preheader120:                                    ; preds = %.preheader123, %.preheader120
  %indvars.iv = phi i64 [ 0, %.preheader123 ], [ %indvars.iv.next, %.preheader120 ]
  %.0109127 = phi float [ 0.000000e+00, %.preheader123 ], [ %.1, %.preheader120 ]
  %.0111126 = phi float [ 0.000000e+00, %.preheader123 ], [ %.1112, %.preheader120 ]
  %57 = shl nuw nsw i64 %indvars.iv, 4
  %58 = getelementptr inbounds float, ptr %.0105138, i64 %57
  %59 = load <4 x float>, ptr %58, align 4, !tbaa !5
  %60 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %59)
  store <4 x float> %60, ptr %6, align 16, !tbaa !5
  %61 = or disjoint i64 %57, 4
  %62 = getelementptr inbounds float, ptr %.0105138, i64 %61
  %63 = load <4 x float>, ptr %62, align 4, !tbaa !5
  %64 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %63)
  store <4 x float> %64, ptr %16, align 16, !tbaa !5
  %65 = or disjoint i64 %57, 8
  %66 = getelementptr inbounds float, ptr %.0105138, i64 %65
  %67 = load <4 x float>, ptr %66, align 4, !tbaa !5
  %68 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %67)
  store <4 x float> %68, ptr %17, align 16, !tbaa !5
  %69 = or disjoint i64 %57, 12
  %70 = getelementptr inbounds float, ptr %.0105138, i64 %69
  %71 = load <4 x float>, ptr %70, align 4, !tbaa !5
  %72 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %71)
  store <4 x float> %72, ptr %18, align 16, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %4, i64 %57
  %74 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv
  %75 = call float @make_qkx2_quants(i32 noundef 16, i32 noundef 3, ptr noundef nonnull %58, ptr noundef nonnull %6, ptr noundef nonnull %73, ptr noundef nonnull %74, ptr noundef nonnull %5, float noundef -5.000000e-01, float noundef 0x3FB99999A0000000, i32 noundef 15, i1 noundef zeroext true)
  %76 = getelementptr inbounds [16 x float], ptr %8, i64 0, i64 %indvars.iv
  store float %75, ptr %76, align 4, !tbaa !5
  %77 = fcmp ogt float %75, %.0109127
  %.1 = select i1 %77, float %75, float %.0109127
  %78 = load float, ptr %74, align 4, !tbaa !5
  %79 = fcmp ogt float %78, %.0111126
  %.1112 = select i1 %79, float %78, float %.0111126
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 16
  br i1 %exitcond.not, label %80, label %.preheader120, !llvm.loop !9

80:                                               ; preds = %.preheader120
  %81 = fcmp ogt float %.1, 0.000000e+00
  br i1 %81, label %82, label %.preheader122

.preheader122:                                    ; preds = %80
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) %scevgep, i8 0, i64 16, i1 false), !tbaa !11
  br label %165

82:                                               ; preds = %80
  %83 = fdiv float 1.500000e+01, %.1
  %84 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar
  %85 = load float, ptr %8, align 16, !tbaa !5
  %86 = fmul float %83, %85
  %87 = call i32 @nearest_int(float noundef %86)
  %88 = trunc i32 %87 to i8
  store i8 %88, ptr %84, align 1, !tbaa !11
  %89 = load float, ptr %19, align 4, !tbaa !5
  %90 = fmul float %83, %89
  %91 = call i32 @nearest_int(float noundef %90)
  %92 = trunc i32 %91 to i8
  %93 = getelementptr inbounds i8, ptr %84, i64 1
  store i8 %92, ptr %93, align 1, !tbaa !11
  %94 = load float, ptr %20, align 8, !tbaa !5
  %95 = fmul float %83, %94
  %96 = call i32 @nearest_int(float noundef %95)
  %97 = trunc i32 %96 to i8
  %98 = getelementptr inbounds i8, ptr %84, i64 2
  store i8 %97, ptr %98, align 1, !tbaa !11
  %99 = load float, ptr %21, align 4, !tbaa !5
  %100 = fmul float %83, %99
  %101 = call i32 @nearest_int(float noundef %100)
  %102 = trunc i32 %101 to i8
  %103 = getelementptr inbounds i8, ptr %84, i64 3
  store i8 %102, ptr %103, align 1, !tbaa !11
  %104 = load float, ptr %22, align 16, !tbaa !5
  %105 = fmul float %83, %104
  %106 = call i32 @nearest_int(float noundef %105)
  %107 = trunc i32 %106 to i8
  %108 = getelementptr inbounds i8, ptr %84, i64 4
  store i8 %107, ptr %108, align 1, !tbaa !11
  %109 = load float, ptr %23, align 4, !tbaa !5
  %110 = fmul float %83, %109
  %111 = call i32 @nearest_int(float noundef %110)
  %112 = trunc i32 %111 to i8
  %113 = getelementptr inbounds i8, ptr %84, i64 5
  store i8 %112, ptr %113, align 1, !tbaa !11
  %114 = load float, ptr %24, align 8, !tbaa !5
  %115 = fmul float %83, %114
  %116 = call i32 @nearest_int(float noundef %115)
  %117 = trunc i32 %116 to i8
  %118 = getelementptr inbounds i8, ptr %84, i64 6
  store i8 %117, ptr %118, align 1, !tbaa !11
  %119 = load float, ptr %25, align 4, !tbaa !5
  %120 = fmul float %83, %119
  %121 = call i32 @nearest_int(float noundef %120)
  %122 = trunc i32 %121 to i8
  %123 = getelementptr inbounds i8, ptr %84, i64 7
  store i8 %122, ptr %123, align 1, !tbaa !11
  %124 = load float, ptr %26, align 16, !tbaa !5
  %125 = fmul float %83, %124
  %126 = call i32 @nearest_int(float noundef %125)
  %127 = trunc i32 %126 to i8
  %128 = getelementptr inbounds i8, ptr %84, i64 8
  store i8 %127, ptr %128, align 1, !tbaa !11
  %129 = load float, ptr %27, align 4, !tbaa !5
  %130 = fmul float %83, %129
  %131 = call i32 @nearest_int(float noundef %130)
  %132 = trunc i32 %131 to i8
  %133 = getelementptr inbounds i8, ptr %84, i64 9
  store i8 %132, ptr %133, align 1, !tbaa !11
  %134 = load float, ptr %28, align 8, !tbaa !5
  %135 = fmul float %83, %134
  %136 = call i32 @nearest_int(float noundef %135)
  %137 = trunc i32 %136 to i8
  %138 = getelementptr inbounds i8, ptr %84, i64 10
  store i8 %137, ptr %138, align 1, !tbaa !11
  %139 = load float, ptr %29, align 4, !tbaa !5
  %140 = fmul float %83, %139
  %141 = call i32 @nearest_int(float noundef %140)
  %142 = trunc i32 %141 to i8
  %143 = getelementptr inbounds i8, ptr %84, i64 11
  store i8 %142, ptr %143, align 1, !tbaa !11
  %144 = load float, ptr %30, align 16, !tbaa !5
  %145 = fmul float %83, %144
  %146 = call i32 @nearest_int(float noundef %145)
  %147 = trunc i32 %146 to i8
  %148 = getelementptr inbounds i8, ptr %84, i64 12
  store i8 %147, ptr %148, align 1, !tbaa !11
  %149 = load float, ptr %31, align 4, !tbaa !5
  %150 = fmul float %83, %149
  %151 = call i32 @nearest_int(float noundef %150)
  %152 = trunc i32 %151 to i8
  %153 = getelementptr inbounds i8, ptr %84, i64 13
  store i8 %152, ptr %153, align 1, !tbaa !11
  %154 = load float, ptr %32, align 8, !tbaa !5
  %155 = fmul float %83, %154
  %156 = call i32 @nearest_int(float noundef %155)
  %157 = trunc i32 %156 to i8
  %158 = getelementptr inbounds i8, ptr %84, i64 14
  store i8 %157, ptr %158, align 1, !tbaa !11
  %159 = load float, ptr %33, align 4, !tbaa !5
  %160 = fmul float %83, %159
  %161 = call i32 @nearest_int(float noundef %160)
  %162 = trunc i32 %161 to i8
  %163 = getelementptr inbounds i8, ptr %84, i64 15
  store i8 %162, ptr %163, align 1, !tbaa !11
  %164 = fdiv float %.1, 1.500000e+01
  br label %165

165:                                              ; preds = %.preheader122, %82
  %.sink170 = phi float [ 0.000000e+00, %.preheader122 ], [ %164, %82 ]
  %166 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef %.sink170)
  %167 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar, i32 2
  store i16 %166, ptr %167, align 4, !tbaa !11
  %168 = fcmp ogt float %.1112, 0.000000e+00
  br i1 %168, label %169, label %250

169:                                              ; preds = %165
  %170 = fdiv float 1.500000e+01, %.1112
  %171 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar
  %172 = load float, ptr %7, align 16, !tbaa !5
  %173 = fmul float %170, %172
  %174 = call i32 @nearest_int(float noundef %173)
  %175 = load float, ptr %34, align 4, !tbaa !5
  %176 = fmul float %170, %175
  %177 = call i32 @nearest_int(float noundef %176)
  %178 = load float, ptr %35, align 8, !tbaa !5
  %179 = fmul float %170, %178
  %180 = call i32 @nearest_int(float noundef %179)
  %181 = load float, ptr %36, align 4, !tbaa !5
  %182 = fmul float %170, %181
  %183 = call i32 @nearest_int(float noundef %182)
  %184 = load float, ptr %37, align 16, !tbaa !5
  %185 = fmul float %170, %184
  %186 = call i32 @nearest_int(float noundef %185)
  %187 = load float, ptr %38, align 4, !tbaa !5
  %188 = fmul float %170, %187
  %189 = call i32 @nearest_int(float noundef %188)
  %190 = load float, ptr %39, align 8, !tbaa !5
  %191 = fmul float %170, %190
  %192 = call i32 @nearest_int(float noundef %191)
  %193 = load float, ptr %40, align 4, !tbaa !5
  %194 = fmul float %170, %193
  %195 = call i32 @nearest_int(float noundef %194)
  %196 = load float, ptr %41, align 16, !tbaa !5
  %197 = fmul float %170, %196
  %198 = call i32 @nearest_int(float noundef %197)
  %199 = load float, ptr %42, align 4, !tbaa !5
  %200 = fmul float %170, %199
  %201 = call i32 @nearest_int(float noundef %200)
  %202 = load float, ptr %43, align 8, !tbaa !5
  %203 = fmul float %170, %202
  %204 = call i32 @nearest_int(float noundef %203)
  %205 = load float, ptr %44, align 4, !tbaa !5
  %206 = fmul float %170, %205
  %207 = call i32 @nearest_int(float noundef %206)
  %208 = load float, ptr %45, align 16, !tbaa !5
  %209 = fmul float %170, %208
  %210 = call i32 @nearest_int(float noundef %209)
  %211 = load float, ptr %46, align 4, !tbaa !5
  %212 = fmul float %170, %211
  %213 = call i32 @nearest_int(float noundef %212)
  %214 = load float, ptr %47, align 8, !tbaa !5
  %215 = fmul float %170, %214
  %216 = call i32 @nearest_int(float noundef %215)
  %217 = load float, ptr %48, align 4, !tbaa !5
  %218 = fmul float %170, %217
  %219 = call i32 @nearest_int(float noundef %218)
  %220 = load <16 x i8>, ptr %171, align 1, !tbaa !11
  %221 = insertelement <8 x i32> poison, i32 %174, i64 0
  %222 = insertelement <8 x i32> %221, i32 %177, i64 1
  %223 = insertelement <8 x i32> %222, i32 %180, i64 2
  %224 = insertelement <8 x i32> %223, i32 %183, i64 3
  %225 = insertelement <8 x i32> %224, i32 %186, i64 4
  %226 = insertelement <8 x i32> %225, i32 %189, i64 5
  %227 = insertelement <8 x i32> %226, i32 %192, i64 6
  %228 = insertelement <8 x i32> %227, i32 %195, i64 7
  %229 = trunc <8 x i32> %228 to <8 x i8>
  %230 = shufflevector <8 x i8> %229, <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %231 = trunc i32 %198 to i8
  %232 = insertelement <16 x i8> %230, i8 %231, i64 8
  %233 = trunc i32 %201 to i8
  %234 = insertelement <16 x i8> %232, i8 %233, i64 9
  %235 = trunc i32 %204 to i8
  %236 = insertelement <16 x i8> %234, i8 %235, i64 10
  %237 = trunc i32 %207 to i8
  %238 = insertelement <16 x i8> %236, i8 %237, i64 11
  %239 = trunc i32 %210 to i8
  %240 = insertelement <16 x i8> %238, i8 %239, i64 12
  %241 = trunc i32 %213 to i8
  %242 = insertelement <16 x i8> %240, i8 %241, i64 13
  %243 = trunc i32 %216 to i8
  %244 = insertelement <16 x i8> %242, i8 %243, i64 14
  %245 = trunc i32 %219 to i8
  %246 = insertelement <16 x i8> %244, i8 %245, i64 15
  %247 = shl <16 x i8> %246, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %248 = or <16 x i8> %247, %220
  store <16 x i8> %248, ptr %171, align 1, !tbaa !11
  %249 = fdiv float %.1112, 1.500000e+01
  br label %250

250:                                              ; preds = %165, %169
  %.sink171 = phi float [ %249, %169 ], [ 0.000000e+00, %165 ]
  %251 = call zeroext i16 @ggml_compute_fp32_to_fp16(float noundef %.sink171)
  %gep = getelementptr inbounds %struct.block_q2_K, ptr %invariant.gep, i64 %indvar, i32 2
  store i16 %251, ptr %gep, align 2, !tbaa !11
  %252 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar
  %253 = getelementptr inbounds i8, ptr %252, i64 80
  %254 = load i16, ptr %253, align 4, !tbaa !11
  %255 = getelementptr inbounds i8, ptr %252, i64 82
  br label %256

256:                                              ; preds = %250, %.loopexit
  %indvars.iv156 = phi i64 [ 0, %250 ], [ %indvars.iv.next157, %.loopexit ]
  %257 = call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %254)
  %258 = getelementptr inbounds [16 x i8], ptr %252, i64 0, i64 %indvars.iv156
  %259 = load i8, ptr %258, align 1, !tbaa !11
  %260 = and i8 %259, 15
  %261 = uitofp nneg i8 %260 to float
  %262 = fmul float %257, %261
  %263 = fcmp une float %262, 0.000000e+00
  br i1 %263, label %.loopexit.loopexit, label %.loopexit

.loopexit.loopexit:                               ; preds = %256
  %264 = load i16, ptr %255, align 2, !tbaa !11
  %265 = call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %264)
  %266 = lshr i8 %259, 4
  %267 = uitofp nneg i8 %266 to float
  %268 = fmul float %265, %267
  %269 = shl nuw nsw i64 %indvars.iv156, 4
  %270 = getelementptr inbounds float, ptr %.0105138, i64 %269
  %271 = load float, ptr %270, align 4, !tbaa !5
  %272 = fadd float %268, %271
  %273 = fdiv float %272, %262
  %274 = call i32 @nearest_int(float noundef %273)
  %275 = call i32 @llvm.smin.i32(i32 %274, i32 3)
  %276 = call i32 @llvm.smax.i32(i32 %275, i32 0)
  %277 = trunc nuw nsw i32 %276 to i8
  %278 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %269
  store i8 %277, ptr %278, align 16, !tbaa !11
  %279 = or disjoint i64 %269, 1
  %280 = getelementptr inbounds float, ptr %.0105138, i64 %279
  %281 = load float, ptr %280, align 4, !tbaa !5
  %282 = fadd float %268, %281
  %283 = fdiv float %282, %262
  %284 = call i32 @nearest_int(float noundef %283)
  %285 = call i32 @llvm.smin.i32(i32 %284, i32 3)
  %286 = call i32 @llvm.smax.i32(i32 %285, i32 0)
  %287 = trunc nuw nsw i32 %286 to i8
  %288 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %279
  store i8 %287, ptr %288, align 1, !tbaa !11
  %289 = or disjoint i64 %269, 2
  %290 = getelementptr inbounds float, ptr %.0105138, i64 %289
  %291 = load float, ptr %290, align 4, !tbaa !5
  %292 = fadd float %268, %291
  %293 = fdiv float %292, %262
  %294 = call i32 @nearest_int(float noundef %293)
  %295 = call i32 @llvm.smin.i32(i32 %294, i32 3)
  %296 = call i32 @llvm.smax.i32(i32 %295, i32 0)
  %297 = trunc nuw nsw i32 %296 to i8
  %298 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %289
  store i8 %297, ptr %298, align 2, !tbaa !11
  %299 = or disjoint i64 %269, 3
  %300 = getelementptr inbounds float, ptr %.0105138, i64 %299
  %301 = load float, ptr %300, align 4, !tbaa !5
  %302 = fadd float %268, %301
  %303 = fdiv float %302, %262
  %304 = call i32 @nearest_int(float noundef %303)
  %305 = call i32 @llvm.smin.i32(i32 %304, i32 3)
  %306 = call i32 @llvm.smax.i32(i32 %305, i32 0)
  %307 = trunc nuw nsw i32 %306 to i8
  %308 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %299
  store i8 %307, ptr %308, align 1, !tbaa !11
  %309 = or disjoint i64 %269, 4
  %310 = getelementptr inbounds float, ptr %.0105138, i64 %309
  %311 = load float, ptr %310, align 4, !tbaa !5
  %312 = fadd float %268, %311
  %313 = fdiv float %312, %262
  %314 = call i32 @nearest_int(float noundef %313)
  %315 = call i32 @llvm.smin.i32(i32 %314, i32 3)
  %316 = call i32 @llvm.smax.i32(i32 %315, i32 0)
  %317 = trunc nuw nsw i32 %316 to i8
  %318 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %309
  store i8 %317, ptr %318, align 4, !tbaa !11
  %319 = or disjoint i64 %269, 5
  %320 = getelementptr inbounds float, ptr %.0105138, i64 %319
  %321 = load float, ptr %320, align 4, !tbaa !5
  %322 = fadd float %268, %321
  %323 = fdiv float %322, %262
  %324 = call i32 @nearest_int(float noundef %323)
  %325 = call i32 @llvm.smin.i32(i32 %324, i32 3)
  %326 = call i32 @llvm.smax.i32(i32 %325, i32 0)
  %327 = trunc nuw nsw i32 %326 to i8
  %328 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %319
  store i8 %327, ptr %328, align 1, !tbaa !11
  %329 = or disjoint i64 %269, 6
  %330 = getelementptr inbounds float, ptr %.0105138, i64 %329
  %331 = load float, ptr %330, align 4, !tbaa !5
  %332 = fadd float %268, %331
  %333 = fdiv float %332, %262
  %334 = call i32 @nearest_int(float noundef %333)
  %335 = call i32 @llvm.smin.i32(i32 %334, i32 3)
  %336 = call i32 @llvm.smax.i32(i32 %335, i32 0)
  %337 = trunc nuw nsw i32 %336 to i8
  %338 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %329
  store i8 %337, ptr %338, align 2, !tbaa !11
  %339 = or disjoint i64 %269, 7
  %340 = getelementptr inbounds float, ptr %.0105138, i64 %339
  %341 = load float, ptr %340, align 4, !tbaa !5
  %342 = fadd float %268, %341
  %343 = fdiv float %342, %262
  %344 = call i32 @nearest_int(float noundef %343)
  %345 = call i32 @llvm.smin.i32(i32 %344, i32 3)
  %346 = call i32 @llvm.smax.i32(i32 %345, i32 0)
  %347 = trunc nuw nsw i32 %346 to i8
  %348 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %339
  store i8 %347, ptr %348, align 1, !tbaa !11
  %349 = or disjoint i64 %269, 8
  %350 = getelementptr inbounds float, ptr %.0105138, i64 %349
  %351 = load float, ptr %350, align 4, !tbaa !5
  %352 = fadd float %268, %351
  %353 = fdiv float %352, %262
  %354 = call i32 @nearest_int(float noundef %353)
  %355 = call i32 @llvm.smin.i32(i32 %354, i32 3)
  %356 = call i32 @llvm.smax.i32(i32 %355, i32 0)
  %357 = trunc nuw nsw i32 %356 to i8
  %358 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %349
  store i8 %357, ptr %358, align 8, !tbaa !11
  %359 = or disjoint i64 %269, 9
  %360 = getelementptr inbounds float, ptr %.0105138, i64 %359
  %361 = load float, ptr %360, align 4, !tbaa !5
  %362 = fadd float %268, %361
  %363 = fdiv float %362, %262
  %364 = call i32 @nearest_int(float noundef %363)
  %365 = call i32 @llvm.smin.i32(i32 %364, i32 3)
  %366 = call i32 @llvm.smax.i32(i32 %365, i32 0)
  %367 = trunc nuw nsw i32 %366 to i8
  %368 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %359
  store i8 %367, ptr %368, align 1, !tbaa !11
  %369 = or disjoint i64 %269, 10
  %370 = getelementptr inbounds float, ptr %.0105138, i64 %369
  %371 = load float, ptr %370, align 4, !tbaa !5
  %372 = fadd float %268, %371
  %373 = fdiv float %372, %262
  %374 = call i32 @nearest_int(float noundef %373)
  %375 = call i32 @llvm.smin.i32(i32 %374, i32 3)
  %376 = call i32 @llvm.smax.i32(i32 %375, i32 0)
  %377 = trunc nuw nsw i32 %376 to i8
  %378 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %369
  store i8 %377, ptr %378, align 2, !tbaa !11
  %379 = or disjoint i64 %269, 11
  %380 = getelementptr inbounds float, ptr %.0105138, i64 %379
  %381 = load float, ptr %380, align 4, !tbaa !5
  %382 = fadd float %268, %381
  %383 = fdiv float %382, %262
  %384 = call i32 @nearest_int(float noundef %383)
  %385 = call i32 @llvm.smin.i32(i32 %384, i32 3)
  %386 = call i32 @llvm.smax.i32(i32 %385, i32 0)
  %387 = trunc nuw nsw i32 %386 to i8
  %388 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %379
  store i8 %387, ptr %388, align 1, !tbaa !11
  %389 = or disjoint i64 %269, 12
  %390 = getelementptr inbounds float, ptr %.0105138, i64 %389
  %391 = load float, ptr %390, align 4, !tbaa !5
  %392 = fadd float %268, %391
  %393 = fdiv float %392, %262
  %394 = call i32 @nearest_int(float noundef %393)
  %395 = call i32 @llvm.smin.i32(i32 %394, i32 3)
  %396 = call i32 @llvm.smax.i32(i32 %395, i32 0)
  %397 = trunc nuw nsw i32 %396 to i8
  %398 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %389
  store i8 %397, ptr %398, align 4, !tbaa !11
  %399 = or disjoint i64 %269, 13
  %400 = getelementptr inbounds float, ptr %.0105138, i64 %399
  %401 = load float, ptr %400, align 4, !tbaa !5
  %402 = fadd float %268, %401
  %403 = fdiv float %402, %262
  %404 = call i32 @nearest_int(float noundef %403)
  %405 = call i32 @llvm.smin.i32(i32 %404, i32 3)
  %406 = call i32 @llvm.smax.i32(i32 %405, i32 0)
  %407 = trunc nuw nsw i32 %406 to i8
  %408 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %399
  store i8 %407, ptr %408, align 1, !tbaa !11
  %409 = or disjoint i64 %269, 14
  %410 = getelementptr inbounds float, ptr %.0105138, i64 %409
  %411 = load float, ptr %410, align 4, !tbaa !5
  %412 = fadd float %268, %411
  %413 = fdiv float %412, %262
  %414 = call i32 @nearest_int(float noundef %413)
  %415 = call i32 @llvm.smin.i32(i32 %414, i32 3)
  %416 = call i32 @llvm.smax.i32(i32 %415, i32 0)
  %417 = trunc nuw nsw i32 %416 to i8
  %418 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %409
  store i8 %417, ptr %418, align 2, !tbaa !11
  %419 = or disjoint i64 %269, 15
  %420 = getelementptr inbounds float, ptr %.0105138, i64 %419
  %421 = load float, ptr %420, align 4, !tbaa !5
  %422 = fadd float %268, %421
  %423 = fdiv float %422, %262
  %424 = call i32 @nearest_int(float noundef %423)
  %425 = call i32 @llvm.smin.i32(i32 %424, i32 3)
  %426 = call i32 @llvm.smax.i32(i32 %425, i32 0)
  %427 = trunc nuw nsw i32 %426 to i8
  %428 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %419
  store i8 %427, ptr %428, align 1, !tbaa !11
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %256
  %indvars.iv.next157 = add nuw nsw i64 %indvars.iv156, 1
  %exitcond159.not = icmp eq i64 %indvars.iv.next157, 16
  br i1 %exitcond159.not, label %vector.body, label %256, !llvm.loop !12

vector.body:                                      ; preds = %.loopexit
  %wide.load = load <16 x i8>, ptr %4, align 16, !tbaa !11
  %wide.load172 = load <16 x i8>, ptr %49, align 16, !tbaa !11
  %wide.load173 = load <16 x i8>, ptr %50, align 16, !tbaa !11
  %wide.load174 = load <16 x i8>, ptr %51, align 16, !tbaa !11
  %429 = shl <16 x i8> %wide.load173, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %430 = shl <16 x i8> %wide.load174, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %431 = or <16 x i8> %429, %wide.load
  %432 = or <16 x i8> %430, %wide.load172
  %wide.load175 = load <16 x i8>, ptr %52, align 16, !tbaa !11
  %wide.load176 = load <16 x i8>, ptr %53, align 16, !tbaa !11
  %433 = shl <16 x i8> %wide.load175, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %434 = shl <16 x i8> %wide.load176, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %435 = or <16 x i8> %431, %433
  %436 = or <16 x i8> %432, %434
  %wide.load177 = load <16 x i8>, ptr %54, align 16, !tbaa !11
  %wide.load178 = load <16 x i8>, ptr %55, align 16, !tbaa !11
  %437 = shl <16 x i8> %wide.load177, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
  %438 = shl <16 x i8> %wide.load178, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
  %439 = or <16 x i8> %435, %437
  %440 = or <16 x i8> %436, %438
  %441 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar, i32 1, i64 0
  %442 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar, i32 1, i64 16
  store <16 x i8> %439, ptr %441, align 1, !tbaa !11
  store <16 x i8> %440, ptr %442, align 1, !tbaa !11
  br label %.preheader.1

.preheader.1:                                     ; preds = %vector.body, %.preheader.1
  %indvars.iv160.1 = phi i64 [ %indvars.iv.next161.1, %.preheader.1 ], [ 0, %vector.body ]
  %443 = or disjoint i64 %indvars.iv160.1, 128
  %444 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %443
  %445 = load i8, ptr %444, align 1, !tbaa !11
  %446 = or i64 %indvars.iv160.1, 160
  %447 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %446
  %448 = load i8, ptr %447, align 1, !tbaa !11
  %449 = shl i8 %448, 2
  %450 = or i8 %449, %445
  %451 = or i64 %indvars.iv160.1, 192
  %452 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %451
  %453 = load i8, ptr %452, align 1, !tbaa !11
  %454 = shl i8 %453, 4
  %455 = or i8 %450, %454
  %456 = or i64 %indvars.iv160.1, 224
  %457 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %456
  %458 = load i8, ptr %457, align 1, !tbaa !11
  %459 = shl i8 %458, 6
  %460 = or i8 %455, %459
  %461 = or disjoint i64 %indvars.iv160.1, 32
  %462 = getelementptr inbounds %struct.block_q2_K, ptr %1, i64 %indvar, i32 1, i64 %461
  store i8 %460, ptr %462, align 1, !tbaa !11
  %indvars.iv.next161.1 = add nuw nsw i64 %indvars.iv160.1, 1
  %exitcond163.1.not = icmp eq i64 %indvars.iv.next161.1, 32
  br i1 %exitcond163.1.not, label %463, label %.preheader.1, !llvm.loop !13

463:                                              ; preds = %.preheader.1
  %464 = getelementptr inbounds i8, ptr %.0105138, i64 1024
  %indvar.next = add nuw nsw i64 %indvar, 1
  %exitcond168.not = icmp eq i64 %indvar.next, %wide.trip.count
  br i1 %exitcond168.not, label %._crit_edge, label %.preheader123, !llvm.loop !14
}

; Function Attrs: nounwind uwtable
declare hidden float @make_qkx2_quants(i32 noundef, i32 noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, ptr noalias noundef, float noundef, float noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @nearest_int(float noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #4

attributes #0 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { noreturn nounwind }
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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}


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