| //===- VerificationUtils.cpp - Common verification utilities --------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "mlir/Dialect/Utils/VerificationUtils.h" | |
| using namespace mlir; | |
| LogicalResult mlir::verifyDynamicDimensionCount(Operation *op, ShapedType type, | |
| ValueRange dynamicSizes) { | |
| int64_t expectedCount = type.getNumDynamicDims(); | |
| int64_t actualCount = dynamicSizes.size(); | |
| if (expectedCount != actualCount) { | |
| return op->emitOpError("incorrect number of dynamic sizes, has ") | |
| << actualCount << ", expected " << expectedCount; | |
| } | |
| return success(); | |
| } | |
| LogicalResult mlir::verifyRanksMatch(Operation *op, ShapedType lhs, | |
| ShapedType rhs, StringRef lhsName, | |
| StringRef rhsName) { | |
| if (!lhs.hasRank() || !rhs.hasRank()) | |
| return success(); // Unranked types are considered compatible | |
| int64_t rank1 = lhs.getRank(); | |
| int64_t rank2 = rhs.getRank(); | |
| if (rank1 != rank2) { | |
| return op->emitOpError() | |
| << lhsName << " rank (" << rank1 << ") does not match " << rhsName | |
| << " rank (" << rank2 << ")"; | |
| } | |
| return success(); | |
| } | |
| LogicalResult mlir::verifyElementTypesMatch(Operation *op, ShapedType lhs, | |
| ShapedType rhs, StringRef lhsName, | |
| StringRef rhsName) { | |
| Type lhsElementType = lhs.getElementType(); | |
| Type rhsElementType = rhs.getElementType(); | |
| if (lhsElementType != rhsElementType) { | |
| return op->emitOpError() << lhsName << " element type (" << lhsElementType | |
| << ") does not match " << rhsName | |
| << " element type (" << rhsElementType << ")"; | |
| } | |
| return success(); | |
| } |