[Mlir-commits] [mlir] [MLIR][XeGPU] Extend op definitions to support 3D+: dpas, dpas_mx (PR #199809)
Charitha Saumya
llvmlistbot at llvm.org
Thu May 28 14:52:45 PDT 2026
================
@@ -720,31 +720,78 @@ static LogicalResult verifyDpasDimensions(Operation *op,
if (aRank == 1 && bRank == 1 && resRank == 1)
return success();
- // Validate A and B are 2D
- if (aRank != 2)
- return op->emitOpError("A operand must be a 2D vector.");
- if (bRank < 2 || bRank > 3)
- return op->emitOpError("B operand must be a 2D or 3D vector.");
- if (resRank != 2)
- return op->emitOpError("Result must be a 2D vector.");
+ // A must be at least 2D, B must be 2D or 3D (innermost dims), result at
+ // least 2D.
+ if (aRank < 2)
+ return op->emitOpError("A operand must be at least a 2D vector.");
+ if (bRank < 2)
+ return op->emitOpError("B operand must be at least a 2D vector.");
+ if (resRank < 2)
+ return op->emitOpError("Result must be at least a 2D vector.");
+
+ // Determine batch dimensions. For A[batch..., M, K], B[batch..., K, N] (or
+ // B[batch..., K/vnni, N, vnni]), result[batch..., M, N].
+ // B may have one extra trailing dim for VNNI packing (3D innermost).
+ // Determine how many trailing dims are the "core" matmul dims.
+ // A core dims: last 2 (M, K)
+ // B core dims: last 2 (K, N) or last 3 (K/vnni, N, vnni) for packed
+ // Result core dims: last 2 (M, N)
+ int64_t aBatchRank = aRank - 2;
+ int64_t resBatchRank = resRank - 2;
+
+ // B can have an extra trailing dim for VNNI packing. Determine B's batch
+ // rank: if bRank > aRank, the extra dim is the VNNI packing dim.
+ bool bPacked = (bRank == aRank + 1);
----------------
charithaintc wrote:
maybe for now we could simply return success() early if its packed and avoid do further verification for this case (Add a FIXME to cleanup).
For other cases we continue the **simpler** verification where all operands have same rank.
https://github.com/llvm/llvm-project/pull/199809
More information about the Mlir-commits
mailing list