[Mlir-commits] [mlir] bc18624 - [mlir] vector.type_cast: disallow memrefs with layout in verifier
Alex Zinenko
llvmlistbot at llvm.org
Thu Mar 19 02:15:50 PDT 2020
Author: Alex Zinenko
Date: 2020-03-19T10:15:41+01:00
New Revision: bc18624b40385dd317b9de051946a57884eeb441
URL: https://github.com/llvm/llvm-project/commit/bc18624b40385dd317b9de051946a57884eeb441
DIFF: https://github.com/llvm/llvm-project/commit/bc18624b40385dd317b9de051946a57884eeb441.diff
LOG: [mlir] vector.type_cast: disallow memrefs with layout in verifier
Summary:
These are not supported by any of the code using `type_cast`. In the general
case, such casting would require memrefs to handle a non-contiguous vector
representation or misaligned vectors (e.g., if the offset of the source memref
is not divisible by vector size, since offset in the target memref is expressed
in the number of elements).
Differential Revision: https://reviews.llvm.org/D76349
Added:
Modified:
mlir/lib/Dialect/Vector/VectorOps.cpp
mlir/test/Dialect/Vector/invalid.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Vector/VectorOps.cpp b/mlir/lib/Dialect/Vector/VectorOps.cpp
index 342ce37ad515..fba0f4af5f26 100644
--- a/mlir/lib/Dialect/Vector/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/VectorOps.cpp
@@ -1483,6 +1483,10 @@ static void print(OpAsmPrinter &p, TypeCastOp op) {
}
static LogicalResult verify(TypeCastOp op) {
+ MemRefType canonicalType = canonicalizeStridedLayout(op.getMemRefType());
+ if (!canonicalType.getAffineMaps().empty())
+ return op.emitOpError("expects operand to be a memref with no layout");
+
auto resultType = inferVectorTypeCastResultType(op.getMemRefType());
if (op.getResultMemRefType() != resultType)
return op.emitOpError("expects result type to be: ") << resultType;
diff --git a/mlir/test/Dialect/Vector/invalid.mlir b/mlir/test/Dialect/Vector/invalid.mlir
index 91f6850779a9..d9093edb3765 100644
--- a/mlir/test/Dialect/Vector/invalid.mlir
+++ b/mlir/test/Dialect/Vector/invalid.mlir
@@ -1046,3 +1046,10 @@ func @reduce_unsupported_rank(%arg0: vector<4x16xf32>) -> f32 {
// expected-error at +1 {{'vector.reduction' op unsupported reduction rank: 2}}
%0 = vector.reduction "add", %arg0 : vector<4x16xf32> into f32
}
+
+// -----
+
+func @type_cast_layout(%arg0: memref<4x3xf32, affine_map<(d0, d1)[s0, s1, s2] -> (d0 * s0 + d1 * s1 + s2)>>) {
+ // expected-error at +1 {{expects operand to be a memref with no layout}}
+ %0 = vector.type_cast %arg0: memref<4x3xf32, affine_map<(d0, d1)[s0, s1, s2] -> (d0 * s0 + d1 * s1 + s2)>> to memref<vector<4x3xf32>>
+}
More information about the Mlir-commits
mailing list