[Mlir-commits] [mlir] [mlir][SPIR-V] Require DotProductInput4x8Bit only for 4-element i8 vectors (PR #237711)

Arseniy Obolenskiy llvmlistbot at llvm.org
Sun Nov 1 03:14:31 PST 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/237711

Other i8 vector sizes need DotProductInputAll per SPV_KHR_integer_dot_product

>From c7b96bc591c213560397128beddc80578e714696 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Sun, 1 Nov 2026 12:14:00 +0100
Subject: [PATCH] [mlir][SPIR-V] Require DotProductInput4x8Bit only for
 4-element i8 vectors

Other i8 vector sizes need DotProductInputAll per SPV_KHR_integer_dot_product
---
 mlir/lib/Dialect/SPIRV/IR/DotProductOps.cpp  |  2 +-
 mlir/test/Dialect/SPIRV/IR/availability.mlir | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/mlir/lib/Dialect/SPIRV/IR/DotProductOps.cpp b/mlir/lib/Dialect/SPIRV/IR/DotProductOps.cpp
index c76f9475f99382..c8463d33784177 100644
--- a/mlir/lib/Dialect/SPIRV/IR/DotProductOps.cpp
+++ b/mlir/lib/Dialect/SPIRV/IR/DotProductOps.cpp
@@ -141,7 +141,7 @@ getIntegerDotProductCapabilities(Operation *op) {
   }
 
   auto vecTy = cast<VectorType>(factorTy);
-  if (vecTy.getElementTypeBitWidth() == 8) {
+  if (vecTy.getElementTypeBitWidth() == 8 && vecTy.getNumElements() == 4) {
     capabilities.push_back(dotProductInput4x8BitCap);
     return capabilities;
   }
diff --git a/mlir/test/Dialect/SPIRV/IR/availability.mlir b/mlir/test/Dialect/SPIRV/IR/availability.mlir
index c0bf80b709ebdc..f2a573e703baaf 100644
--- a/mlir/test/Dialect/SPIRV/IR/availability.mlir
+++ b/mlir/test/Dialect/SPIRV/IR/availability.mlir
@@ -84,6 +84,16 @@ func.func @sdot_vector_4xi16_i64(%a: vector<4xi16>) -> i64 {
   return %r: i64
 }
 
+// CHECK-LABEL: sdot_vector_2xi8_i32
+func.func @sdot_vector_2xi8_i32(%a: vector<2xi8>) -> i32 {
+  // CHECK: min version: v1.0
+  // CHECK: max version: v1.6
+  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]
+  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]
+  %r = spirv.SDot %a, %a: vector<2xi8> -> i32
+  return %r: i32
+}
+
 // CHECK-LABEL: sudot_scalar_i32_i32
 func.func @sudot_scalar_i32_i32(%a: i32) -> i32 {
   // CHECK: min version: v1.0



More information about the Mlir-commits mailing list