[Mlir-commits] [mlir] be4c5ad - [mlir][vector] Add scalable vectors support to OuterProductOp
Prabhdeep Singh Soni
llvmlistbot at llvm.org
Fri Jan 13 07:54:32 PST 2023
Author: Frank (Fang) Gao
Date: 2023-01-13T10:54:18-05:00
New Revision: be4c5ad54c929f2d817ab4a55707f0beda73a05f
URL: https://github.com/llvm/llvm-project/commit/be4c5ad54c929f2d817ab4a55707f0beda73a05f
DIFF: https://github.com/llvm/llvm-project/commit/be4c5ad54c929f2d817ab4a55707f0beda73a05f.diff
LOG: [mlir][vector] Add scalable vectors support to OuterProductOp
This will probably be the first in a series of patches that tries to
enable code generation for ARM SME (extension of SVE).
Since SME's core operation is the outer product instruction, I figured
that it would probably be a good idea to enable the outer product
operation to properly accept and generate scalable vectors.
Reviewed By: dcaballe
Differential Revision: https://reviews.llvm.org/D138718
Added:
Modified:
mlir/lib/Dialect/Vector/IR/VectorOps.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index cc56ce6271e88..e2a3e619164e2 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -2657,10 +2657,18 @@ ParseResult OuterProductOp::parse(OpAsmParser &parser, OperationState &result) {
if (!vLHS)
return parser.emitError(parser.getNameLoc(),
"expected vector type for operand #1");
- VectorType resType =
- vRHS ? VectorType::get({vLHS.getDimSize(0), vRHS.getDimSize(0)},
- vLHS.getElementType())
- : VectorType::get({vLHS.getDimSize(0)}, vLHS.getElementType());
+
+ unsigned numScalableDims = vLHS.getNumScalableDims();
+ VectorType resType;
+ if (vRHS) {
+ numScalableDims += vRHS.getNumScalableDims();
+ resType = VectorType::get({vLHS.getDimSize(0), vRHS.getDimSize(0)},
+ vLHS.getElementType(), numScalableDims);
+ } else {
+ // Scalar RHS operand
+ resType = VectorType::get({vLHS.getDimSize(0)}, vLHS.getElementType(),
+ numScalableDims);
+ }
if (!result.attributes.get(OuterProductOp::getKindAttrStrName())) {
result.attributes.append(
@@ -2696,6 +2704,9 @@ LogicalResult OuterProductOp::verify() {
return emitOpError("expected #1 operand dim to match result dim #1");
if (vRHS.getDimSize(0) != vRES.getDimSize(1))
return emitOpError("expected #2 operand dim to match result dim #2");
+ if (vRHS.isScalable() != vLHS.isScalable())
+ return emitOpError("expected either all or none of vector operands #1 "
+ "and #2 to be scalable");
} else {
// An AXPY operation.
if (vRES.getRank() != 1)
More information about the Mlir-commits
mailing list