diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp index 1c21a2f270da6..ea856057f9d85 100644 --- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp +++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp @@ -3113,6 +3113,39 @@ LogicalResult SubViewOp::verify() { ArrayRef staticSizes = getStaticSizes(); ArrayRef staticStrides = getStaticStrides(); + // Check number of static offsets, sizes and strides match source rank. + int64_t baseRank = baseType.getRank(); + size_t numStaticOffsets = staticOffsets.size(); + if (static_cast(numStaticOffsets) != baseRank) + return emitError("number of static offsets (") + << numStaticOffsets << ") does not match source rank (" << baseRank + << ")"; + size_t numStaticSizes = staticSizes.size(); + if (static_cast(numStaticSizes) != baseRank) + return emitError("number of static sizes (") + << numStaticSizes << ") does not match source rank (" << baseRank + << ")"; + size_t numStaticStrides = staticStrides.size(); + if (static_cast(numStaticStrides) != baseRank) + return emitError("number of static strides (") + << numStaticStrides << ") does not match source rank (" << baseRank + << ")"; + + // Check number of dynamic offsets, sizes and strides is less of equal to the + // source rank. + size_t numOffsets = getOffsets().size(); + if (static_cast(numOffsets) > baseRank) + return emitError("number of dynamic offsets (") + << numOffsets << ") bigger than rank (" << baseRank << ")"; + size_t numSizes = getSizes().size(); + if (static_cast(numSizes) > baseRank) + return emitError("number of dynamic sizes (") + << numSizes << ") bigger than rank (" << baseRank << ")"; + size_t numStrides = getStrides().size(); + if (static_cast(numStrides) > baseRank) + return emitError("number of dynamic strides (") + << numStrides << ") bigger than rank (" << baseRank << ")"; + // The base memref and the view memref should be in the same memory space. if (baseType.getMemorySpace() != subViewType.getMemorySpace()) return emitError("different memory spaces specified for base memref "