; LLVM IR from ggml-org/ggml :: src/ggml-cpu (ggml-cpu-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_tq1_0 = type { [48 x i8], [4 x i8], i16 }
%struct.block_q8_K = type { float, [256 x i8], [16 x i16] }

@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__.ggml_vec_dot_tq1_0_q8_K = external hidden unnamed_addr constant [124 x i8], align 1
@__const.ggml_vec_dot_tq1_0_q8_K.pow3 = external hidden unnamed_addr constant [6 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 willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

41:                                               ; preds = %8
  br label %43

42:                                               ; preds = %8
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 4018, ptr noundef @__PRETTY_FUNCTION__.ggml_vec_dot_tq1_0_q8_K) #6
  unreachable

43:                                               ; preds = %41
  %44 = load i32, ptr %16, align 4, !tbaa !5
  %45 = load i64, ptr %13, align 8, !tbaa !11
  %46 = load i64, ptr %15, align 8, !tbaa !11
  %47 = load i64, ptr %11, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %48 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %48, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %49 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %49, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %50 = load i32, ptr %9, align 4, !tbaa !5
  %51 = sdiv i32 %50, 256
  store i32 %51, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 6, ptr %20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %20, ptr align 1 @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store float 0.000000e+00, ptr %21, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %52

52:                                               ; preds = %276, %43
  %53 = load i32, ptr %22, align 4, !tbaa !5
  %54 = load i32, ptr %19, align 4, !tbaa !5
  %55 = icmp slt i32 %53, %54
  br i1 %55, label %57, label %56

56:                                               ; preds = %52
  store i32 2, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %279

57:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  store i64 0, ptr %25, align 8, !tbaa !11
  br label %58

58:                                               ; preds = %125, %57
  %59 = load i64, ptr %25, align 8, !tbaa !11
  %60 = icmp ult i64 %59, 32
  br i1 %60, label %62, label %61

61:                                               ; preds = %58
  store i32 5, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %128

62:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  store i64 0, ptr %26, align 8, !tbaa !11
  br label %63

63:                                               ; preds = %121, %62
  %64 = load i64, ptr %26, align 8, !tbaa !11
  %65 = icmp ult i64 %64, 5
  br i1 %65, label %67, label %66

66:                                               ; preds = %63
  store i32 8, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %124

67:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 0, ptr %27, align 8, !tbaa !11
  br label %68

68:                                               ; preds = %117, %67
  %69 = load i64, ptr %27, align 8, !tbaa !11
  %70 = icmp ult i64 %69, 32
  br i1 %70, label %72, label %71

71:                                               ; preds = %68
  store i32 11, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %120

72:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  %73 = load ptr, ptr %17, align 8, !tbaa !9
  %74 = load i32, ptr %22, align 4, !tbaa !5
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds %struct.block_tq1_0, ptr %73, i64 %75
  %77 = getelementptr inbounds %struct.block_tq1_0, ptr %76, i32 0, i32 0
  %78 = load i64, ptr %25, align 8, !tbaa !11
  %79 = load i64, ptr %27, align 8, !tbaa !11
  %80 = add i64 %78, %79
  %81 = getelementptr inbounds [48 x i8], ptr %77, i64 0, i64 %80
  %82 = load i8, ptr %81, align 1, !tbaa !15
  %83 = zext i8 %82 to i32
  %84 = load i64, ptr %26, align 8, !tbaa !11
  %85 = getelementptr inbounds [6 x i8], ptr %20, i64 0, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !15
  %87 = zext i8 %86 to i32
  %88 = mul nsw i32 %83, %87
  %89 = trunc i32 %88 to i8
  store i8 %89, ptr %28, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #7
  %90 = load i8, ptr %28, align 1, !tbaa !15
  %91 = zext i8 %90 to i16
  %92 = zext i16 %91 to i32
  %93 = mul nsw i32 %92, 3
  %94 = ashr i32 %93, 8
  %95 = trunc i32 %94 to i16
  store i16 %95, ptr %29, align 2, !tbaa !16
  %96 = load i16, ptr %29, align 2, !tbaa !16
  %97 = zext i16 %96 to i32
  %98 = sub nsw i32 %97, 1
  %99 = load ptr, ptr %18, align 8, !tbaa !9
  %100 = load i32, ptr %22, align 4, !tbaa !5
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds %struct.block_q8_K, ptr %99, i64 %101
  %103 = getelementptr inbounds %struct.block_q8_K, ptr %102, i32 0, i32 1
  %104 = load i64, ptr %25, align 8, !tbaa !11
  %105 = mul i64 %104, 5
  %106 = load i64, ptr %26, align 8, !tbaa !11
  %107 = mul i64 %106, 32
  %108 = add i64 %105, %107
  %109 = load i64, ptr %27, align 8, !tbaa !11
  %110 = add i64 %108, %109
  %111 = getelementptr inbounds [256 x i8], ptr %103, i64 0, i64 %110
  %112 = load i8, ptr %111, align 1, !tbaa !15
  %113 = sext i8 %112 to i32
  %114 = mul nsw i32 %98, %113
  %115 = load i32, ptr %24, align 4, !tbaa !5
  %116 = add nsw i32 %115, %114
  store i32 %116, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  br label %117

117:                                              ; preds = %72
  %118 = load i64, ptr %27, align 8, !tbaa !11
  %119 = add i64 %118, 1
  store i64 %119, ptr %27, align 8, !tbaa !11
  br label %68, !llvm.loop !18

120:                                              ; preds = %71
  br label %121

121:                                              ; preds = %120
  %122 = load i64, ptr %26, align 8, !tbaa !11
  %123 = add i64 %122, 1
  store i64 %123, ptr %26, align 8, !tbaa !11
  br label %63, !llvm.loop !20

124:                                              ; preds = %66
  br label %125

125:                                              ; preds = %124
  %126 = load i64, ptr %25, align 8, !tbaa !11
  %127 = add i64 %126, 32
  store i64 %127, ptr %25, align 8, !tbaa !11
  br label %58, !llvm.loop !21

128:                                              ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  store i64 32, ptr %30, align 8, !tbaa !11
  br label %129

129:                                              ; preds = %196, %128
  %130 = load i64, ptr %30, align 8, !tbaa !11
  %131 = icmp ult i64 %130, 48
  br i1 %131, label %133, label %132

132:                                              ; preds = %129
  store i32 14, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %199

133:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store i64 0, ptr %31, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %192, %133
  %135 = load i64, ptr %31, align 8, !tbaa !11
  %136 = icmp ult i64 %135, 5
  br i1 %136, label %138, label %137

137:                                              ; preds = %134
  store i32 17, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %195

138:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  store i64 0, ptr %32, align 8, !tbaa !11
  br label %139

139:                                              ; preds = %188, %138
  %140 = load i64, ptr %32, align 8, !tbaa !11
  %141 = icmp ult i64 %140, 16
  br i1 %141, label %143, label %142

142:                                              ; preds = %139
  store i32 20, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %191

143:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #7
  %144 = load ptr, ptr %17, align 8, !tbaa !9
  %145 = load i32, ptr %22, align 4, !tbaa !5
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds %struct.block_tq1_0, ptr %144, i64 %146
  %148 = getelementptr inbounds %struct.block_tq1_0, ptr %147, i32 0, i32 0
  %149 = load i64, ptr %30, align 8, !tbaa !11
  %150 = load i64, ptr %32, align 8, !tbaa !11
  %151 = add i64 %149, %150
  %152 = getelementptr inbounds [48 x i8], ptr %148, i64 0, i64 %151
  %153 = load i8, ptr %152, align 1, !tbaa !15
  %154 = zext i8 %153 to i32
  %155 = load i64, ptr %31, align 8, !tbaa !11
  %156 = getelementptr inbounds [6 x i8], ptr %20, i64 0, i64 %155
  %157 = load i8, ptr %156, align 1, !tbaa !15
  %158 = zext i8 %157 to i32
  %159 = mul nsw i32 %154, %158
  %160 = trunc i32 %159 to i8
  store i8 %160, ptr %33, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #7
  %161 = load i8, ptr %33, align 1, !tbaa !15
  %162 = zext i8 %161 to i16
  %163 = zext i16 %162 to i32
  %164 = mul nsw i32 %163, 3
  %165 = ashr i32 %164, 8
  %166 = trunc i32 %165 to i16
  store i16 %166, ptr %34, align 2, !tbaa !16
  %167 = load i16, ptr %34, align 2, !tbaa !16
  %168 = zext i16 %167 to i32
  %169 = sub nsw i32 %168, 1
  %170 = load ptr, ptr %18, align 8, !tbaa !9
  %171 = load i32, ptr %22, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds %struct.block_q8_K, ptr %170, i64 %172
  %174 = getelementptr inbounds %struct.block_q8_K, ptr %173, i32 0, i32 1
  %175 = load i64, ptr %30, align 8, !tbaa !11
  %176 = mul i64 %175, 5
  %177 = load i64, ptr %31, align 8, !tbaa !11
  %178 = mul i64 %177, 16
  %179 = add i64 %176, %178
  %180 = load i64, ptr %32, align 8, !tbaa !11
  %181 = add i64 %179, %180
  %182 = getelementptr inbounds [256 x i8], ptr %174, i64 0, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !15
  %184 = sext i8 %183 to i32
  %185 = mul nsw i32 %169, %184
  %186 = load i32, ptr %24, align 4, !tbaa !5
  %187 = add nsw i32 %186, %185
  store i32 %187, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  br label %188

188:                                              ; preds = %143
  %189 = load i64, ptr %32, align 8, !tbaa !11
  %190 = add i64 %189, 1
  store i64 %190, ptr %32, align 8, !tbaa !11
  br label %139, !llvm.loop !22

191:                                              ; preds = %142
  br label %192

192:                                              ; preds = %191
  %193 = load i64, ptr %31, align 8, !tbaa !11
  %194 = add i64 %193, 1
  store i64 %194, ptr %31, align 8, !tbaa !11
  br label %134, !llvm.loop !23

195:                                              ; preds = %137
  br label %196

196:                                              ; preds = %195
  %197 = load i64, ptr %30, align 8, !tbaa !11
  %198 = add i64 %197, 16
  store i64 %198, ptr %30, align 8, !tbaa !11
  br label %129, !llvm.loop !24

199:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  store i64 0, ptr %35, align 8, !tbaa !11
  br label %200

200:                                              ; preds = %254, %199
  %201 = load i64, ptr %35, align 8, !tbaa !11
  %202 = icmp ult i64 %201, 4
  br i1 %202, label %204, label %203

203:                                              ; preds = %200
  store i32 23, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %257

204:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  store i64 0, ptr %36, align 8, !tbaa !11
  br label %205

205:                                              ; preds = %250, %204
  %206 = load i64, ptr %36, align 8, !tbaa !11
  %207 = icmp ult i64 %206, 4
  br i1 %207, label %209, label %208

208:                                              ; preds = %205
  store i32 26, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %253

209:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #7
  %210 = load ptr, ptr %17, align 8, !tbaa !9
  %211 = load i32, ptr %22, align 4, !tbaa !5
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds %struct.block_tq1_0, ptr %210, i64 %212
  %214 = getelementptr inbounds %struct.block_tq1_0, ptr %213, i32 0, i32 1
  %215 = load i64, ptr %36, align 8, !tbaa !11
  %216 = getelementptr inbounds [4 x i8], ptr %214, i64 0, i64 %215
  %217 = load i8, ptr %216, align 1, !tbaa !15
  %218 = zext i8 %217 to i32
  %219 = load i64, ptr %35, align 8, !tbaa !11
  %220 = getelementptr inbounds [6 x i8], ptr %20, i64 0, i64 %219
  %221 = load i8, ptr %220, align 1, !tbaa !15
  %222 = zext i8 %221 to i32
  %223 = mul nsw i32 %218, %222
  %224 = trunc i32 %223 to i8
  store i8 %224, ptr %37, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %38) #7
  %225 = load i8, ptr %37, align 1, !tbaa !15
  %226 = zext i8 %225 to i16
  %227 = zext i16 %226 to i32
  %228 = mul nsw i32 %227, 3
  %229 = ashr i32 %228, 8
  %230 = trunc i32 %229 to i16
  store i16 %230, ptr %38, align 2, !tbaa !16
  %231 = load i16, ptr %38, align 2, !tbaa !16
  %232 = zext i16 %231 to i32
  %233 = sub nsw i32 %232, 1
  %234 = load ptr, ptr %18, align 8, !tbaa !9
  %235 = load i32, ptr %22, align 4, !tbaa !5
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds %struct.block_q8_K, ptr %234, i64 %236
  %238 = getelementptr inbounds %struct.block_q8_K, ptr %237, i32 0, i32 1
  %239 = load i64, ptr %35, align 8, !tbaa !11
  %240 = mul i64 %239, 4
  %241 = add i64 240, %240
  %242 = load i64, ptr %36, align 8, !tbaa !11
  %243 = add i64 %241, %242
  %244 = getelementptr inbounds [256 x i8], ptr %238, i64 0, i64 %243
  %245 = load i8, ptr %244, align 1, !tbaa !15
  %246 = sext i8 %245 to i32
  %247 = mul nsw i32 %233, %246
  %248 = load i32, ptr %24, align 4, !tbaa !5
  %249 = add nsw i32 %248, %247
  store i32 %249, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 2, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  br label %250

250:                                              ; preds = %209
  %251 = load i64, ptr %36, align 8, !tbaa !11
  %252 = add i64 %251, 1
  store i64 %252, ptr %36, align 8, !tbaa !11
  br label %205, !llvm.loop !25

253:                                              ; preds = %208
  br label %254

254:                                              ; preds = %253
  %255 = load i64, ptr %35, align 8, !tbaa !11
  %256 = add i64 %255, 1
  store i64 %256, ptr %35, align 8, !tbaa !11
  br label %200, !llvm.loop !26

257:                                              ; preds = %203
  %258 = load i32, ptr %24, align 4, !tbaa !5
  %259 = sitofp i32 %258 to float
  %260 = load ptr, ptr %17, align 8, !tbaa !9
  %261 = load i32, ptr %22, align 4, !tbaa !5
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds %struct.block_tq1_0, ptr %260, i64 %262
  %264 = getelementptr inbounds %struct.block_tq1_0, ptr %263, i32 0, i32 2
  %265 = load i16, ptr %264, align 2, !tbaa !27
  %266 = call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %265)
  %267 = load ptr, ptr %18, align 8, !tbaa !9
  %268 = load i32, ptr %22, align 4, !tbaa !5
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds %struct.block_q8_K, ptr %267, i64 %269
  %271 = getelementptr inbounds %struct.block_q8_K, ptr %270, i32 0, i32 0
  %272 = load float, ptr %271, align 4, !tbaa !29
  %273 = fmul float %266, %272
  %274 = load float, ptr %21, align 4, !tbaa !13
  %275 = call float @llvm.fmuladd.f32(float %259, float %273, float %274)
  store float %275, ptr %21, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %276

276:                                              ; preds = %257
  %277 = load i32, ptr %22, align 4, !tbaa !5
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %22, align 4, !tbaa !5
  br label %52, !llvm.loop !31

279:                                              ; preds = %56
  %280 = load float, ptr %21, align 4, !tbaa !13
  %281 = load ptr, ptr %10, align 8, !tbaa !9
  store float %280, ptr %281, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 6, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  ret void
}

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 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!7, !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = !{!28, !17, i64 52}
!28 = !{!"", !7, i64 0, !7, i64 48, !17, i64 52}
!29 = !{!30, !14, i64 0}
!30 = !{!"", !14, i64 0, !7, i64 4, !7, i64 260}
!31 = distinct !{!31, !19}


; 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_tq1_0 = type { [48 x i8], [4 x i8], i16 }
%struct.block_q8_K = type { float, [256 x i8], [16 x i16] }

@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__.ggml_vec_dot_tq1_0_q8_K = external hidden unnamed_addr constant [124 x i8], align 1
@__const.ggml_vec_dot_tq1_0_q8_K.pow3 = external hidden unnamed_addr constant [6 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: inlinehint nounwind uwtable
declare hidden float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

; Function Attrs: nounwind uwtable
define dso_local void @ggml_vec_dot_tq1_0_q8_K(i32 noundef %0, ptr noalias nocapture noundef writeonly %1, i64 noundef %2, ptr noalias nocapture noundef readonly %3, i64 noundef %4, ptr noalias nocapture noundef readonly %5, i64 noundef %6, i32 noundef %7) local_unnamed_addr #3 {
  %9 = icmp eq i32 %7, 1
  br i1 %9, label %11, label %10

10:                                               ; preds = %8
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 4018, ptr noundef nonnull @__PRETTY_FUNCTION__.ggml_vec_dot_tq1_0_q8_K) #5
  unreachable

11:                                               ; preds = %8
  %12 = icmp sgt i32 %0, 255
  br i1 %12, label %.preheader87.preheader, label %._crit_edge

.preheader87.preheader:                           ; preds = %11
  %13 = lshr i32 %0, 8
  %wide.trip.count = zext nneg i32 %13 to i64
  %14 = load <4 x i8>, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, align 1, !tbaa !5
  %15 = shufflevector <4 x i8> %14, <4 x i8> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>
  %16 = load i8, ptr getelementptr inbounds (i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 4), align 1, !tbaa !5
  %broadcast.splatinsert = insertelement <4 x i8> poison, i8 %16, i64 0
  %broadcast.splat = shufflevector <4 x i8> %broadcast.splatinsert, <4 x i8> poison, <4 x i32> zeroinitializer
  %broadcast.splat142 = shufflevector <4 x i8> %14, <4 x i8> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
  %broadcast.splat159 = shufflevector <4 x i8> %14, <4 x i8> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
  %broadcast.splat176 = shufflevector <4 x i8> %14, <4 x i8> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat193 = shufflevector <4 x i8> %14, <4 x i8> poison, <4 x i32> zeroinitializer
  %17 = load i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, align 1, !tbaa !5
  %18 = insertelement <16 x i8> poison, i8 %17, i64 0
  %19 = shufflevector <16 x i8> %18, <16 x i8> poison, <16 x i32> zeroinitializer
  %20 = load i8, ptr getelementptr inbounds (i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 1), align 1, !tbaa !5
  %21 = insertelement <16 x i8> poison, i8 %20, i64 0
  %22 = shufflevector <16 x i8> %21, <16 x i8> poison, <16 x i32> zeroinitializer
  %23 = load i8, ptr getelementptr inbounds (i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 2), align 1, !tbaa !5
  %24 = insertelement <16 x i8> poison, i8 %23, i64 0
  %25 = shufflevector <16 x i8> %24, <16 x i8> poison, <16 x i32> zeroinitializer
  %26 = load i8, ptr getelementptr inbounds (i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 3), align 1, !tbaa !5
  %27 = insertelement <16 x i8> poison, i8 %26, i64 0
  %28 = shufflevector <16 x i8> %27, <16 x i8> poison, <16 x i32> zeroinitializer
  %29 = load i8, ptr getelementptr inbounds (i8, ptr @__const.ggml_vec_dot_tq1_0_q8_K.pow3, i64 4), align 1, !tbaa !5
  %30 = insertelement <16 x i8> poison, i8 %29, i64 0
  %31 = shufflevector <16 x i8> %30, <16 x i8> poison, <16 x i32> zeroinitializer
  br label %.preheader87

.preheader87:                                     ; preds = %.preheader87.preheader, %.preheader87
  %indvars.iv = phi i64 [ 0, %.preheader87.preheader ], [ %indvars.iv.next, %.preheader87 ]
  %.0104 = phi float [ 0.000000e+00, %.preheader87.preheader ], [ %510, %.preheader87 ]
  %32 = getelementptr inbounds %struct.block_tq1_0, ptr %3, i64 %indvars.iv
  %33 = getelementptr inbounds i8, ptr %32, i64 32
  %34 = load <16 x i8>, ptr %33, align 1, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %32, i64 28
  %wide.load128.3 = load <4 x i8>, ptr %35, align 1, !tbaa !5
  %36 = mul <4 x i8> %broadcast.splat, %wide.load128.3
  %37 = zext <4 x i8> %36 to <4 x i32>
  %38 = mul nuw nsw <4 x i32> %37, <i32 3, i32 3, i32 3, i32 3>
  %39 = lshr <4 x i32> %38, <i32 8, i32 8, i32 8, i32 8>
  %40 = add nsw <4 x i32> %39, <i32 -1, i32 -1, i32 -1, i32 -1>
  %41 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 156
  %wide.load130.3 = load <4 x i8>, ptr %41, align 1, !tbaa !5
  %42 = sext <4 x i8> %wide.load130.3 to <4 x i32>
  %43 = mul nsw <4 x i32> %40, %42
  %44 = getelementptr inbounds i8, ptr %32, i64 20
  %wide.load128.2 = load <4 x i8>, ptr %44, align 1, !tbaa !5
  %45 = mul <4 x i8> %broadcast.splat, %wide.load128.2
  %46 = zext <4 x i8> %45 to <4 x i32>
  %47 = mul nuw nsw <4 x i32> %46, <i32 3, i32 3, i32 3, i32 3>
  %48 = lshr <4 x i32> %47, <i32 8, i32 8, i32 8, i32 8>
  %49 = add nsw <4 x i32> %48, <i32 -1, i32 -1, i32 -1, i32 -1>
  %50 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 148
  %wide.load130.2 = load <4 x i8>, ptr %50, align 1, !tbaa !5
  %51 = sext <4 x i8> %wide.load130.2 to <4 x i32>
  %52 = mul nsw <4 x i32> %49, %51
  %53 = getelementptr inbounds i8, ptr %32, i64 12
  %wide.load128.1 = load <4 x i8>, ptr %53, align 1, !tbaa !5
  %54 = mul <4 x i8> %broadcast.splat, %wide.load128.1
  %55 = zext <4 x i8> %54 to <4 x i32>
  %56 = mul nuw nsw <4 x i32> %55, <i32 3, i32 3, i32 3, i32 3>
  %57 = lshr <4 x i32> %56, <i32 8, i32 8, i32 8, i32 8>
  %58 = add nsw <4 x i32> %57, <i32 -1, i32 -1, i32 -1, i32 -1>
  %59 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 140
  %wide.load130.1 = load <4 x i8>, ptr %59, align 1, !tbaa !5
  %60 = sext <4 x i8> %wide.load130.1 to <4 x i32>
  %61 = mul nsw <4 x i32> %58, %60
  %62 = getelementptr inbounds i8, ptr %32, i64 4
  %wide.load128 = load <4 x i8>, ptr %62, align 1, !tbaa !5
  %63 = mul <4 x i8> %broadcast.splat, %wide.load128
  %64 = zext <4 x i8> %63 to <4 x i32>
  %65 = mul nuw nsw <4 x i32> %64, <i32 3, i32 3, i32 3, i32 3>
  %66 = lshr <4 x i32> %65, <i32 8, i32 8, i32 8, i32 8>
  %67 = add nsw <4 x i32> %66, <i32 -1, i32 -1, i32 -1, i32 -1>
  %68 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 132
  %wide.load130 = load <4 x i8>, ptr %68, align 1, !tbaa !5
  %69 = sext <4 x i8> %wide.load130 to <4 x i32>
  %70 = mul nsw <4 x i32> %67, %69
  %71 = add nsw <4 x i32> %61, %70
  %72 = add nsw <4 x i32> %52, %71
  %73 = add <4 x i32> %43, %72
  %74 = getelementptr inbounds i8, ptr %32, i64 24
  %wide.load.3 = load <4 x i8>, ptr %74, align 1, !tbaa !5
  %75 = mul <4 x i8> %broadcast.splat, %wide.load.3
  %76 = zext <4 x i8> %75 to <4 x i32>
  %77 = mul nuw nsw <4 x i32> %76, <i32 3, i32 3, i32 3, i32 3>
  %78 = lshr <4 x i32> %77, <i32 8, i32 8, i32 8, i32 8>
  %79 = add nsw <4 x i32> %78, <i32 -1, i32 -1, i32 -1, i32 -1>
  %80 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 152
  %wide.load129.3 = load <4 x i8>, ptr %80, align 1, !tbaa !5
  %81 = sext <4 x i8> %wide.load129.3 to <4 x i32>
  %82 = mul nsw <4 x i32> %79, %81
  %83 = getelementptr inbounds i8, ptr %32, i64 16
  %wide.load.2 = load <4 x i8>, ptr %83, align 1, !tbaa !5
  %84 = mul <4 x i8> %broadcast.splat, %wide.load.2
  %85 = zext <4 x i8> %84 to <4 x i32>
  %86 = mul nuw nsw <4 x i32> %85, <i32 3, i32 3, i32 3, i32 3>
  %87 = lshr <4 x i32> %86, <i32 8, i32 8, i32 8, i32 8>
  %88 = add nsw <4 x i32> %87, <i32 -1, i32 -1, i32 -1, i32 -1>
  %89 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 144
  %wide.load129.2 = load <4 x i8>, ptr %89, align 1, !tbaa !5
  %90 = sext <4 x i8> %wide.load129.2 to <4 x i32>
  %91 = mul nsw <4 x i32> %88, %90
  %92 = getelementptr inbounds i8, ptr %32, i64 8
  %wide.load.1 = load <4 x i8>, ptr %92, align 1, !tbaa !5
  %93 = mul <4 x i8> %broadcast.splat, %wide.load.1
  %94 = zext <4 x i8> %93 to <4 x i32>
  %95 = mul nuw nsw <4 x i32> %94, <i32 3, i32 3, i32 3, i32 3>
  %96 = lshr <4 x i32> %95, <i32 8, i32 8, i32 8, i32 8>
  %97 = add nsw <4 x i32> %96, <i32 -1, i32 -1, i32 -1, i32 -1>
  %98 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 136
  %wide.load129.1 = load <4 x i8>, ptr %98, align 1, !tbaa !5
  %99 = sext <4 x i8> %wide.load129.1 to <4 x i32>
  %100 = mul nsw <4 x i32> %97, %99
  %wide.load = load <4 x i8>, ptr %32, align 1, !tbaa !5
  %101 = mul <4 x i8> %broadcast.splat, %wide.load
  %102 = zext <4 x i8> %101 to <4 x i32>
  %103 = mul nuw nsw <4 x i32> %102, <i32 3, i32 3, i32 3, i32 3>
  %104 = lshr <4 x i32> %103, <i32 8, i32 8, i32 8, i32 8>
  %105 = add nsw <4 x i32> %104, <i32 -1, i32 -1, i32 -1, i32 -1>
  %106 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 128
  %wide.load129 = load <4 x i8>, ptr %106, align 1, !tbaa !5
  %107 = sext <4 x i8> %wide.load129 to <4 x i32>
  %108 = mul nsw <4 x i32> %105, %107
  %109 = getelementptr inbounds i8, ptr %32, i64 28
  %wide.load140.3 = load <4 x i8>, ptr %109, align 1, !tbaa !5
  %110 = mul <4 x i8> %broadcast.splat142, %wide.load140.3
  %111 = zext <4 x i8> %110 to <4 x i32>
  %112 = mul nuw nsw <4 x i32> %111, <i32 3, i32 3, i32 3, i32 3>
  %113 = lshr <4 x i32> %112, <i32 8, i32 8, i32 8, i32 8>
  %114 = add nsw <4 x i32> %113, <i32 -1, i32 -1, i32 -1, i32 -1>
  %115 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 124
  %wide.load144.3 = load <4 x i8>, ptr %115, align 1, !tbaa !5
  %116 = sext <4 x i8> %wide.load144.3 to <4 x i32>
  %117 = mul nsw <4 x i32> %114, %116
  %118 = getelementptr inbounds i8, ptr %32, i64 20
  %wide.load140.2 = load <4 x i8>, ptr %118, align 1, !tbaa !5
  %119 = mul <4 x i8> %broadcast.splat142, %wide.load140.2
  %120 = zext <4 x i8> %119 to <4 x i32>
  %121 = mul nuw nsw <4 x i32> %120, <i32 3, i32 3, i32 3, i32 3>
  %122 = lshr <4 x i32> %121, <i32 8, i32 8, i32 8, i32 8>
  %123 = add nsw <4 x i32> %122, <i32 -1, i32 -1, i32 -1, i32 -1>
  %124 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 116
  %wide.load144.2 = load <4 x i8>, ptr %124, align 1, !tbaa !5
  %125 = sext <4 x i8> %wide.load144.2 to <4 x i32>
  %126 = mul nsw <4 x i32> %123, %125
  %127 = getelementptr inbounds i8, ptr %32, i64 12
  %wide.load140.1 = load <4 x i8>, ptr %127, align 1, !tbaa !5
  %128 = mul <4 x i8> %broadcast.splat142, %wide.load140.1
  %129 = zext <4 x i8> %128 to <4 x i32>
  %130 = mul nuw nsw <4 x i32> %129, <i32 3, i32 3, i32 3, i32 3>
  %131 = lshr <4 x i32> %130, <i32 8, i32 8, i32 8, i32 8>
  %132 = add nsw <4 x i32> %131, <i32 -1, i32 -1, i32 -1, i32 -1>
  %133 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 108
  %wide.load144.1 = load <4 x i8>, ptr %133, align 1, !tbaa !5
  %134 = sext <4 x i8> %wide.load144.1 to <4 x i32>
  %135 = mul nsw <4 x i32> %132, %134
  %136 = getelementptr inbounds i8, ptr %32, i64 4
  %wide.load140 = load <4 x i8>, ptr %136, align 1, !tbaa !5
  %137 = mul <4 x i8> %broadcast.splat142, %wide.load140
  %138 = zext <4 x i8> %137 to <4 x i32>
  %139 = mul nuw nsw <4 x i32> %138, <i32 3, i32 3, i32 3, i32 3>
  %140 = lshr <4 x i32> %139, <i32 8, i32 8, i32 8, i32 8>
  %141 = add nsw <4 x i32> %140, <i32 -1, i32 -1, i32 -1, i32 -1>
  %142 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 100
  %wide.load144 = load <4 x i8>, ptr %142, align 1, !tbaa !5
  %143 = sext <4 x i8> %wide.load144 to <4 x i32>
  %144 = mul nsw <4 x i32> %141, %143
  %145 = add nsw <4 x i32> %135, %144
  %146 = add nsw <4 x i32> %126, %145
  %147 = add <4 x i32> %117, %146
  %148 = getelementptr inbounds i8, ptr %32, i64 24
  %wide.load139.3 = load <4 x i8>, ptr %148, align 1, !tbaa !5
  %149 = mul <4 x i8> %broadcast.splat142, %wide.load139.3
  %150 = zext <4 x i8> %149 to <4 x i32>
  %151 = mul nuw nsw <4 x i32> %150, <i32 3, i32 3, i32 3, i32 3>
  %152 = lshr <4 x i32> %151, <i32 8, i32 8, i32 8, i32 8>
  %153 = add nsw <4 x i32> %152, <i32 -1, i32 -1, i32 -1, i32 -1>
  %154 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 120
  %wide.load143.3 = load <4 x i8>, ptr %154, align 1, !tbaa !5
  %155 = sext <4 x i8> %wide.load143.3 to <4 x i32>
  %156 = mul nsw <4 x i32> %153, %155
  %157 = getelementptr inbounds i8, ptr %32, i64 16
  %wide.load139.2 = load <4 x i8>, ptr %157, align 1, !tbaa !5
  %158 = mul <4 x i8> %broadcast.splat142, %wide.load139.2
  %159 = zext <4 x i8> %158 to <4 x i32>
  %160 = mul nuw nsw <4 x i32> %159, <i32 3, i32 3, i32 3, i32 3>
  %161 = lshr <4 x i32> %160, <i32 8, i32 8, i32 8, i32 8>
  %162 = add nsw <4 x i32> %161, <i32 -1, i32 -1, i32 -1, i32 -1>
  %163 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 112
  %wide.load143.2 = load <4 x i8>, ptr %163, align 1, !tbaa !5
  %164 = sext <4 x i8> %wide.load143.2 to <4 x i32>
  %165 = mul nsw <4 x i32> %162, %164
  %166 = getelementptr inbounds i8, ptr %32, i64 8
  %wide.load139.1 = load <4 x i8>, ptr %166, align 1, !tbaa !5
  %167 = mul <4 x i8> %broadcast.splat142, %wide.load139.1
  %168 = zext <4 x i8> %167 to <4 x i32>
  %169 = mul nuw nsw <4 x i32> %168, <i32 3, i32 3, i32 3, i32 3>
  %170 = lshr <4 x i32> %169, <i32 8, i32 8, i32 8, i32 8>
  %171 = add nsw <4 x i32> %170, <i32 -1, i32 -1, i32 -1, i32 -1>
  %172 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 104
  %wide.load143.1 = load <4 x i8>, ptr %172, align 1, !tbaa !5
  %173 = sext <4 x i8> %wide.load143.1 to <4 x i32>
  %174 = mul nsw <4 x i32> %171, %173
  %wide.load139 = load <4 x i8>, ptr %32, align 1, !tbaa !5
  %175 = mul <4 x i8> %broadcast.splat142, %wide.load139
  %176 = zext <4 x i8> %175 to <4 x i32>
  %177 = mul nuw nsw <4 x i32> %176, <i32 3, i32 3, i32 3, i32 3>
  %178 = lshr <4 x i32> %177, <i32 8, i32 8, i32 8, i32 8>
  %179 = add nsw <4 x i32> %178, <i32 -1, i32 -1, i32 -1, i32 -1>
  %180 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 96
  %wide.load143 = load <4 x i8>, ptr %180, align 1, !tbaa !5
  %181 = sext <4 x i8> %wide.load143 to <4 x i32>
  %182 = mul nsw <4 x i32> %179, %181
  %183 = getelementptr inbounds i8, ptr %32, i64 28
  %wide.load157.3 = load <4 x i8>, ptr %183, align 1, !tbaa !5
  %184 = mul <4 x i8> %broadcast.splat159, %wide.load157.3
  %185 = zext <4 x i8> %184 to <4 x i32>
  %186 = mul nuw nsw <4 x i32> %185, <i32 3, i32 3, i32 3, i32 3>
  %187 = lshr <4 x i32> %186, <i32 8, i32 8, i32 8, i32 8>
  %188 = add nsw <4 x i32> %187, <i32 -1, i32 -1, i32 -1, i32 -1>
  %189 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 92
  %wide.load161.3 = load <4 x i8>, ptr %189, align 1, !tbaa !5
  %190 = sext <4 x i8> %wide.load161.3 to <4 x i32>
  %191 = mul nsw <4 x i32> %188, %190
  %192 = getelementptr inbounds i8, ptr %32, i64 20
  %wide.load157.2 = load <4 x i8>, ptr %192, align 1, !tbaa !5
  %193 = mul <4 x i8> %broadcast.splat159, %wide.load157.2
  %194 = zext <4 x i8> %193 to <4 x i32>
  %195 = mul nuw nsw <4 x i32> %194, <i32 3, i32 3, i32 3, i32 3>
  %196 = lshr <4 x i32> %195, <i32 8, i32 8, i32 8, i32 8>
  %197 = add nsw <4 x i32> %196, <i32 -1, i32 -1, i32 -1, i32 -1>
  %198 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 84
  %wide.load161.2 = load <4 x i8>, ptr %198, align 1, !tbaa !5
  %199 = sext <4 x i8> %wide.load161.2 to <4 x i32>
  %200 = mul nsw <4 x i32> %197, %199
  %201 = getelementptr inbounds i8, ptr %32, i64 12
  %wide.load157.1 = load <4 x i8>, ptr %201, align 1, !tbaa !5
  %202 = mul <4 x i8> %broadcast.splat159, %wide.load157.1
  %203 = zext <4 x i8> %202 to <4 x i32>
  %204 = mul nuw nsw <4 x i32> %203, <i32 3, i32 3, i32 3, i32 3>
  %205 = lshr <4 x i32> %204, <i32 8, i32 8, i32 8, i32 8>
  %206 = add nsw <4 x i32> %205, <i32 -1, i32 -1, i32 -1, i32 -1>
  %207 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 76
  %wide.load161.1 = load <4 x i8>, ptr %207, align 1, !tbaa !5
  %208 = sext <4 x i8> %wide.load161.1 to <4 x i32>
  %209 = mul nsw <4 x i32> %206, %208
  %210 = getelementptr inbounds i8, ptr %32, i64 4
  %wide.load157 = load <4 x i8>, ptr %210, align 1, !tbaa !5
  %211 = mul <4 x i8> %broadcast.splat159, %wide.load157
  %212 = zext <4 x i8> %211 to <4 x i32>
  %213 = mul nuw nsw <4 x i32> %212, <i32 3, i32 3, i32 3, i32 3>
  %214 = lshr <4 x i32> %213, <i32 8, i32 8, i32 8, i32 8>
  %215 = add nsw <4 x i32> %214, <i32 -1, i32 -1, i32 -1, i32 -1>
  %216 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 68
  %wide.load161 = load <4 x i8>, ptr %216, align 1, !tbaa !5
  %217 = sext <4 x i8> %wide.load161 to <4 x i32>
  %218 = mul nsw <4 x i32> %215, %217
  %219 = add nsw <4 x i32> %209, %218
  %220 = add nsw <4 x i32> %200, %219
  %221 = add <4 x i32> %191, %220
  %222 = getelementptr inbounds i8, ptr %32, i64 24
  %wide.load156.3 = load <4 x i8>, ptr %222, align 1, !tbaa !5
  %223 = mul <4 x i8> %broadcast.splat159, %wide.load156.3
  %224 = zext <4 x i8> %223 to <4 x i32>
  %225 = mul nuw nsw <4 x i32> %224, <i32 3, i32 3, i32 3, i32 3>
  %226 = lshr <4 x i32> %225, <i32 8, i32 8, i32 8, i32 8>
  %227 = add nsw <4 x i32> %226, <i32 -1, i32 -1, i32 -1, i32 -1>
  %228 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 88
  %wide.load160.3 = load <4 x i8>, ptr %228, align 1, !tbaa !5
  %229 = sext <4 x i8> %wide.load160.3 to <4 x i32>
  %230 = mul nsw <4 x i32> %227, %229
  %231 = getelementptr inbounds i8, ptr %32, i64 16
  %wide.load156.2 = load <4 x i8>, ptr %231, align 1, !tbaa !5
  %232 = mul <4 x i8> %broadcast.splat159, %wide.load156.2
  %233 = zext <4 x i8> %232 to <4 x i32>
  %234 = mul nuw nsw <4 x i32> %233, <i32 3, i32 3, i32 3, i32 3>
  %235 = lshr <4 x i32> %234, <i32 8, i32 8, i32 8, i32 8>
  %236 = add nsw <4 x i32> %235, <i32 -1, i32 -1, i32 -1, i32 -1>
  %237 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 80
  %wide.load160.2 = load <4 x i8>, ptr %237, align 1, !tbaa !5
  %238 = sext <4 x i8> %wide.load160.2 to <4 x i32>
  %239 = mul nsw <4 x i32> %236, %238
  %240 = getelementptr inbounds i8, ptr %32, i64 8
  %wide.load156.1 = load <4 x i8>, ptr %240, align 1, !tbaa !5
  %241 = mul <4 x i8> %broadcast.splat159, %wide.load156.1
  %242 = zext <4 x i8> %241 to <4 x i32>
  %243 = mul nuw nsw <4 x i32> %242, <i32 3, i32 3, i32 3, i32 3>
  %244 = lshr <4 x i32> %243, <i32 8, i32 8, i32 8, i32 8>
  %245 = add nsw <4 x i32> %244, <i32 -1, i32 -1, i32 -1, i32 -1>
  %246 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 72
  %wide.load160.1 = load <4 x i8>, ptr %246, align 1, !tbaa !5
  %247 = sext <4 x i8> %wide.load160.1 to <4 x i32>
  %248 = mul nsw <4 x i32> %245, %247
  %wide.load156 = load <4 x i8>, ptr %32, align 1, !tbaa !5
  %249 = mul <4 x i8> %broadcast.splat159, %wide.load156
  %250 = zext <4 x i8> %249 to <4 x i32>
  %251 = mul nuw nsw <4 x i32> %250, <i32 3, i32 3, i32 3, i32 3>
  %252 = lshr <4 x i32> %251, <i32 8, i32 8, i32 8, i32 8>
  %253 = add nsw <4 x i32> %252, <i32 -1, i32 -1, i32 -1, i32 -1>
  %254 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 64
  %wide.load160 = load <4 x i8>, ptr %254, align 1, !tbaa !5
  %255 = sext <4 x i8> %wide.load160 to <4 x i32>
  %256 = mul nsw <4 x i32> %253, %255
  %257 = getelementptr inbounds i8, ptr %32, i64 28
  %wide.load174.3 = load <4 x i8>, ptr %257, align 1, !tbaa !5
  %258 = mul <4 x i8> %broadcast.splat176, %wide.load174.3
  %259 = zext <4 x i8> %258 to <4 x i32>
  %260 = mul nuw nsw <4 x i32> %259, <i32 3, i32 3, i32 3, i32 3>
  %261 = lshr <4 x i32> %260, <i32 8, i32 8, i32 8, i32 8>
  %262 = add nsw <4 x i32> %261, <i32 -1, i32 -1, i32 -1, i32 -1>
  %263 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 60
  %wide.load178.3 = load <4 x i8>, ptr %263, align 1, !tbaa !5
  %264 = sext <4 x i8> %wide.load178.3 to <4 x i32>
  %265 = mul nsw <4 x i32> %262, %264
  %266 = getelementptr inbounds i8, ptr %32, i64 20
  %wide.load174.2 = load <4 x i8>, ptr %266, align 1, !tbaa !5
  %267 = mul <4 x i8> %broadcast.splat176, %wide.load174.2
  %268 = zext <4 x i8> %267 to <4 x i32>
  %269 = mul nuw nsw <4 x i32> %268, <i32 3, i32 3, i32 3, i32 3>
  %270 = lshr <4 x i32> %269, <i32 8, i32 8, i32 8, i32 8>
  %271 = add nsw <4 x i32> %270, <i32 -1, i32 -1, i32 -1, i32 -1>
  %272 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 52
  %wide.load178.2 = load <4 x i8>, ptr %272, align 1, !tbaa !5
  %273 = sext <4 x i8> %wide.load178.2 to <4 x i32>
  %274 = mul nsw <4 x i32> %271, %273
  %275 = getelementptr inbounds i8, ptr %32, i64 12
  %wide.load174.1 = load <4 x i8>, ptr %275, align 1, !tbaa !5
  %276 = mul <4 x i8> %broadcast.splat176, %wide.load174.1
  %277 = zext <4 x i8> %276 to <4 x i32>
  %278 = mul nuw nsw <4 x i32> %277, <i32 3, i32 3, i32 3, i32 3>
  %279 = lshr <4 x i32> %278, <i32 8, i32 8, i32 8, i32 8>
  %280 = add nsw <4 x i32> %279, <i32 -1, i32 -1, i32 -1, i32 -1>
  %281 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 44
  %wide.load178.1 = load <4 x i8>, ptr %281, align 1, !tbaa !5
  %282 = sext <4 x i8> %wide.load178.1 to <4 x i32>
  %283 = mul nsw <4 x i32> %280, %282
  %284 = getelementptr inbounds i8, ptr %32, i64 4
  %wide.load174 = load <4 x i8>, ptr %284, align 1, !tbaa !5
  %285 = mul <4 x i8> %broadcast.splat176, %wide.load174
  %286 = zext <4 x i8> %285 to <4 x i32>
  %287 = mul nuw nsw <4 x i32> %286, <i32 3, i32 3, i32 3, i32 3>
  %288 = lshr <4 x i32> %287, <i32 8, i32 8, i32 8, i32 8>
  %289 = add nsw <4 x i32> %288, <i32 -1, i32 -1, i32 -1, i32 -1>
  %290 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 36
  %wide.load178 = load <4 x i8>, ptr %290, align 1, !tbaa !5
  %291 = sext <4 x i8> %wide.load178 to <4 x i32>
  %292 = mul nsw <4 x i32> %289, %291
  %293 = add nsw <4 x i32> %283, %292
  %294 = add nsw <4 x i32> %274, %293
  %295 = add <4 x i32> %265, %294
  %296 = getelementptr inbounds i8, ptr %32, i64 24
  %wide.load173.3 = load <4 x i8>, ptr %296, align 1, !tbaa !5
  %297 = mul <4 x i8> %broadcast.splat176, %wide.load173.3
  %298 = zext <4 x i8> %297 to <4 x i32>
  %299 = mul nuw nsw <4 x i32> %298, <i32 3, i32 3, i32 3, i32 3>
  %300 = lshr <4 x i32> %299, <i32 8, i32 8, i32 8, i32 8>
  %301 = add nsw <4 x i32> %300, <i32 -1, i32 -1, i32 -1, i32 -1>
  %302 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 56
  %wide.load177.3 = load <4 x i8>, ptr %302, align 1, !tbaa !5
  %303 = sext <4 x i8> %wide.load177.3 to <4 x i32>
  %304 = mul nsw <4 x i32> %301, %303
  %305 = getelementptr inbounds i8, ptr %32, i64 16
  %wide.load173.2 = load <4 x i8>, ptr %305, align 1, !tbaa !5
  %306 = mul <4 x i8> %broadcast.splat176, %wide.load173.2
  %307 = zext <4 x i8> %306 to <4 x i32>
  %308 = mul nuw nsw <4 x i32> %307, <i32 3, i32 3, i32 3, i32 3>
  %309 = lshr <4 x i32> %308, <i32 8, i32 8, i32 8, i32 8>
  %310 = add nsw <4 x i32> %309, <i32 -1, i32 -1, i32 -1, i32 -1>
  %311 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 48
  %wide.load177.2 = load <4 x i8>, ptr %311, align 1, !tbaa !5
  %312 = sext <4 x i8> %wide.load177.2 to <4 x i32>
  %313 = mul nsw <4 x i32> %310, %312
  %314 = getelementptr inbounds i8, ptr %32, i64 8
  %wide.load173.1 = load <4 x i8>, ptr %314, align 1, !tbaa !5
  %315 = mul <4 x i8> %broadcast.splat176, %wide.load173.1
  %316 = zext <4 x i8> %315 to <4 x i32>
  %317 = mul nuw nsw <4 x i32> %316, <i32 3, i32 3, i32 3, i32 3>
  %318 = lshr <4 x i32> %317, <i32 8, i32 8, i32 8, i32 8>
  %319 = add nsw <4 x i32> %318, <i32 -1, i32 -1, i32 -1, i32 -1>
  %320 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 40
  %wide.load177.1 = load <4 x i8>, ptr %320, align 1, !tbaa !5
  %321 = sext <4 x i8> %wide.load177.1 to <4 x i32>
  %322 = mul nsw <4 x i32> %319, %321
  %wide.load173 = load <4 x i8>, ptr %32, align 1, !tbaa !5
  %323 = mul <4 x i8> %broadcast.splat176, %wide.load173
  %324 = zext <4 x i8> %323 to <4 x i32>
  %325 = mul nuw nsw <4 x i32> %324, <i32 3, i32 3, i32 3, i32 3>
  %326 = lshr <4 x i32> %325, <i32 8, i32 8, i32 8, i32 8>
  %327 = add nsw <4 x i32> %326, <i32 -1, i32 -1, i32 -1, i32 -1>
  %328 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 32
  %wide.load177 = load <4 x i8>, ptr %328, align 1, !tbaa !5
  %329 = sext <4 x i8> %wide.load177 to <4 x i32>
  %330 = mul nsw <4 x i32> %327, %329
  %331 = getelementptr inbounds i8, ptr %32, i64 28
  %wide.load191.3 = load <4 x i8>, ptr %331, align 1, !tbaa !5
  %332 = mul <4 x i8> %broadcast.splat193, %wide.load191.3
  %333 = zext <4 x i8> %332 to <4 x i32>
  %334 = mul nuw nsw <4 x i32> %333, <i32 3, i32 3, i32 3, i32 3>
  %335 = lshr <4 x i32> %334, <i32 8, i32 8, i32 8, i32 8>
  %336 = add nsw <4 x i32> %335, <i32 -1, i32 -1, i32 -1, i32 -1>
  %337 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 28
  %wide.load195.3 = load <4 x i8>, ptr %337, align 1, !tbaa !5
  %338 = sext <4 x i8> %wide.load195.3 to <4 x i32>
  %339 = mul nsw <4 x i32> %336, %338
  %340 = getelementptr inbounds i8, ptr %32, i64 20
  %wide.load191.2 = load <4 x i8>, ptr %340, align 1, !tbaa !5
  %341 = mul <4 x i8> %broadcast.splat193, %wide.load191.2
  %342 = zext <4 x i8> %341 to <4 x i32>
  %343 = mul nuw nsw <4 x i32> %342, <i32 3, i32 3, i32 3, i32 3>
  %344 = lshr <4 x i32> %343, <i32 8, i32 8, i32 8, i32 8>
  %345 = add nsw <4 x i32> %344, <i32 -1, i32 -1, i32 -1, i32 -1>
  %346 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 20
  %wide.load195.2 = load <4 x i8>, ptr %346, align 1, !tbaa !5
  %347 = sext <4 x i8> %wide.load195.2 to <4 x i32>
  %348 = mul nsw <4 x i32> %345, %347
  %349 = getelementptr inbounds i8, ptr %32, i64 12
  %wide.load191.1 = load <4 x i8>, ptr %349, align 1, !tbaa !5
  %350 = mul <4 x i8> %broadcast.splat193, %wide.load191.1
  %351 = zext <4 x i8> %350 to <4 x i32>
  %352 = mul nuw nsw <4 x i32> %351, <i32 3, i32 3, i32 3, i32 3>
  %353 = lshr <4 x i32> %352, <i32 8, i32 8, i32 8, i32 8>
  %354 = add nsw <4 x i32> %353, <i32 -1, i32 -1, i32 -1, i32 -1>
  %355 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 12
  %wide.load195.1 = load <4 x i8>, ptr %355, align 1, !tbaa !5
  %356 = sext <4 x i8> %wide.load195.1 to <4 x i32>
  %357 = mul nsw <4 x i32> %354, %356
  %358 = getelementptr inbounds i8, ptr %32, i64 4
  %wide.load191 = load <4 x i8>, ptr %358, align 1, !tbaa !5
  %359 = mul <4 x i8> %broadcast.splat193, %wide.load191
  %360 = zext <4 x i8> %359 to <4 x i32>
  %361 = mul nuw nsw <4 x i32> %360, <i32 3, i32 3, i32 3, i32 3>
  %362 = lshr <4 x i32> %361, <i32 8, i32 8, i32 8, i32 8>
  %363 = add nsw <4 x i32> %362, <i32 -1, i32 -1, i32 -1, i32 -1>
  %364 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 4
  %wide.load195 = load <4 x i8>, ptr %364, align 1, !tbaa !5
  %365 = sext <4 x i8> %wide.load195 to <4 x i32>
  %366 = mul nsw <4 x i32> %363, %365
  %367 = add nsw <4 x i32> %357, %366
  %368 = add nsw <4 x i32> %348, %367
  %369 = add <4 x i32> %339, %368
  %370 = getelementptr inbounds i8, ptr %32, i64 24
  %wide.load190.3 = load <4 x i8>, ptr %370, align 1, !tbaa !5
  %371 = mul <4 x i8> %broadcast.splat193, %wide.load190.3
  %372 = zext <4 x i8> %371 to <4 x i32>
  %373 = mul nuw nsw <4 x i32> %372, <i32 3, i32 3, i32 3, i32 3>
  %374 = lshr <4 x i32> %373, <i32 8, i32 8, i32 8, i32 8>
  %375 = add nsw <4 x i32> %374, <i32 -1, i32 -1, i32 -1, i32 -1>
  %376 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 24
  %wide.load194.3 = load <4 x i8>, ptr %376, align 1, !tbaa !5
  %377 = sext <4 x i8> %wide.load194.3 to <4 x i32>
  %378 = mul nsw <4 x i32> %375, %377
  %379 = getelementptr inbounds i8, ptr %32, i64 16
  %wide.load190.2 = load <4 x i8>, ptr %379, align 1, !tbaa !5
  %380 = mul <4 x i8> %broadcast.splat193, %wide.load190.2
  %381 = zext <4 x i8> %380 to <4 x i32>
  %382 = mul nuw nsw <4 x i32> %381, <i32 3, i32 3, i32 3, i32 3>
  %383 = lshr <4 x i32> %382, <i32 8, i32 8, i32 8, i32 8>
  %384 = add nsw <4 x i32> %383, <i32 -1, i32 -1, i32 -1, i32 -1>
  %385 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 16
  %wide.load194.2 = load <4 x i8>, ptr %385, align 1, !tbaa !5
  %386 = sext <4 x i8> %wide.load194.2 to <4 x i32>
  %387 = mul nsw <4 x i32> %384, %386
  %388 = getelementptr inbounds i8, ptr %32, i64 8
  %wide.load190.1 = load <4 x i8>, ptr %388, align 1, !tbaa !5
  %389 = mul <4 x i8> %broadcast.splat193, %wide.load190.1
  %390 = zext <4 x i8> %389 to <4 x i32>
  %391 = mul nuw nsw <4 x i32> %390, <i32 3, i32 3, i32 3, i32 3>
  %392 = lshr <4 x i32> %391, <i32 8, i32 8, i32 8, i32 8>
  %393 = add nsw <4 x i32> %392, <i32 -1, i32 -1, i32 -1, i32 -1>
  %394 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 8
  %wide.load194.1 = load <4 x i8>, ptr %394, align 1, !tbaa !5
  %395 = sext <4 x i8> %wide.load194.1 to <4 x i32>
  %396 = mul nsw <4 x i32> %393, %395
  %wide.load190 = load <4 x i8>, ptr %32, align 1, !tbaa !5
  %397 = mul <4 x i8> %broadcast.splat193, %wide.load190
  %398 = zext <4 x i8> %397 to <4 x i32>
  %399 = mul nuw nsw <4 x i32> %398, <i32 3, i32 3, i32 3, i32 3>
  %400 = lshr <4 x i32> %399, <i32 8, i32 8, i32 8, i32 8>
  %401 = add nsw <4 x i32> %400, <i32 -1, i32 -1, i32 -1, i32 -1>
  %402 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 0
  %wide.load194 = load <4 x i8>, ptr %402, align 1, !tbaa !5
  %403 = sext <4 x i8> %wide.load194 to <4 x i32>
  %404 = mul nsw <4 x i32> %401, %403
  %405 = add nsw <4 x i32> %396, %404
  %406 = add nsw <4 x i32> %387, %405
  %407 = add <4 x i32> %378, %406
  %bin.rdx197 = add <4 x i32> %369, %407
  %408 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx197)
  %409 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %408, i64 0
  %410 = add <4 x i32> %330, %409
  %411 = add <4 x i32> %322, %410
  %412 = add <4 x i32> %313, %411
  %413 = add <4 x i32> %304, %412
  %bin.rdx180 = add <4 x i32> %295, %413
  %414 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx180)
  %415 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %414, i64 0
  %416 = add <4 x i32> %256, %415
  %417 = add <4 x i32> %248, %416
  %418 = add <4 x i32> %239, %417
  %419 = add <4 x i32> %230, %418
  %bin.rdx163 = add <4 x i32> %221, %419
  %420 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx163)
  %421 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %420, i64 0
  %422 = add <4 x i32> %182, %421
  %423 = add <4 x i32> %174, %422
  %424 = add <4 x i32> %165, %423
  %425 = add <4 x i32> %156, %424
  %bin.rdx146 = add <4 x i32> %147, %425
  %426 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx146)
  %427 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %426, i64 0
  %428 = add <4 x i32> %108, %427
  %429 = add <4 x i32> %100, %428
  %430 = add <4 x i32> %91, %429
  %431 = add <4 x i32> %82, %430
  %bin.rdx = add <4 x i32> %73, %431
  %432 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %433 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 160
  %434 = mul <16 x i8> %19, %34
  %435 = zext <16 x i8> %434 to <16 x i16>
  %436 = mul nuw nsw <16 x i16> %435, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %437 = lshr <16 x i16> %436, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %438 = add nsw <16 x i16> %437, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %439 = load <16 x i8>, ptr %433, align 1, !tbaa !5
  %440 = sext <16 x i8> %439 to <16 x i16>
  %441 = mul nsw <16 x i16> %438, %440
  %442 = sext <16 x i16> %441 to <16 x i32>
  %443 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %442)
  %op.rdx199 = add i32 %443, %432
  %444 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 176
  %445 = mul <16 x i8> %22, %34
  %446 = zext <16 x i8> %445 to <16 x i16>
  %447 = mul nuw nsw <16 x i16> %446, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %448 = lshr <16 x i16> %447, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %449 = add nsw <16 x i16> %448, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %450 = load <16 x i8>, ptr %444, align 1, !tbaa !5
  %451 = sext <16 x i8> %450 to <16 x i16>
  %452 = mul nsw <16 x i16> %449, %451
  %453 = sext <16 x i16> %452 to <16 x i32>
  %454 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %453)
  %op.rdx199.1 = add i32 %454, %op.rdx199
  %455 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 192
  %456 = mul <16 x i8> %25, %34
  %457 = zext <16 x i8> %456 to <16 x i16>
  %458 = mul nuw nsw <16 x i16> %457, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %459 = lshr <16 x i16> %458, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %460 = add nsw <16 x i16> %459, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %461 = load <16 x i8>, ptr %455, align 1, !tbaa !5
  %462 = sext <16 x i8> %461 to <16 x i16>
  %463 = mul nsw <16 x i16> %460, %462
  %464 = sext <16 x i16> %463 to <16 x i32>
  %465 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %464)
  %op.rdx199.2 = add i32 %465, %op.rdx199.1
  %466 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 208
  %467 = mul <16 x i8> %28, %34
  %468 = zext <16 x i8> %467 to <16 x i16>
  %469 = mul nuw nsw <16 x i16> %468, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %470 = lshr <16 x i16> %469, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %471 = add nsw <16 x i16> %470, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %472 = load <16 x i8>, ptr %466, align 1, !tbaa !5
  %473 = sext <16 x i8> %472 to <16 x i16>
  %474 = mul nsw <16 x i16> %471, %473
  %475 = sext <16 x i16> %474 to <16 x i32>
  %476 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %475)
  %op.rdx199.3 = add i32 %476, %op.rdx199.2
  %477 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 224
  %478 = mul <16 x i8> %31, %34
  %479 = zext <16 x i8> %478 to <16 x i16>
  %480 = mul nuw nsw <16 x i16> %479, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %481 = lshr <16 x i16> %480, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %482 = add nsw <16 x i16> %481, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %483 = load <16 x i8>, ptr %477, align 1, !tbaa !5
  %484 = sext <16 x i8> %483 to <16 x i16>
  %485 = mul nsw <16 x i16> %482, %484
  %486 = sext <16 x i16> %485 to <16 x i32>
  %487 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %486)
  %op.rdx199.4 = add i32 %487, %op.rdx199.3
  %488 = getelementptr inbounds %struct.block_tq1_0, ptr %3, i64 %indvars.iv, i32 1, i64 0
  %489 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv, i32 1, i64 240
  %490 = load <4 x i8>, ptr %488, align 1, !tbaa !5
  %491 = shufflevector <4 x i8> %490, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %492 = shufflevector <16 x i8> %491, <16 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %493 = mul <16 x i8> %15, %492
  %494 = zext <16 x i8> %493 to <16 x i16>
  %495 = mul nuw nsw <16 x i16> %494, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
  %496 = lshr <16 x i16> %495, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %497 = add nsw <16 x i16> %496, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
  %498 = load <16 x i8>, ptr %489, align 1, !tbaa !5
  %499 = sext <16 x i8> %498 to <16 x i16>
  %500 = mul nsw <16 x i16> %497, %499
  %501 = sext <16 x i16> %500 to <16 x i32>
  %502 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %501)
  %op.rdx = add i32 %502, %op.rdx199.4
  %503 = sitofp i32 %op.rdx to float
  %504 = getelementptr inbounds %struct.block_tq1_0, ptr %3, i64 %indvars.iv, i32 2
  %505 = load i16, ptr %504, align 2, !tbaa !8
  %506 = tail call float @ggml_lookup_fp16_to_fp32(i16 noundef zeroext %505)
  %507 = getelementptr inbounds %struct.block_q8_K, ptr %5, i64 %indvars.iv
  %508 = load float, ptr %507, align 4, !tbaa !11
  %509 = fmul float %506, %508
  %510 = tail call float @llvm.fmuladd.f32(float %503, float %509, float %.0104)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond114.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond114.not, label %._crit_edge, label %.preheader87, !llvm.loop !14

._crit_edge:                                      ; preds = %.preheader87, %11
  %.0.lcssa = phi float [ 0.000000e+00, %11 ], [ %510, %.preheader87 ]
  store float %.0.lcssa, ptr %1, align 4, !tbaa !16
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v16i32(<16 x i32>) #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 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { noreturn 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !10, i64 52}
!9 = !{!"", !6, i64 0, !6, i64 48, !10, i64 52}
!10 = !{!"short", !6, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !6, i64 4, !6, i64 260}
!13 = !{!"float", !6, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!13, !13, i64 0}


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