diff options
| author | Smit Hinsu <hinsu@google.com> | 2019-12-14 11:18:01 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-14 11:18:38 -0800 |
| commit | 2d22b1e04e7f75ecc38247fc2a5cd18058374cc0 (patch) | |
| tree | f0fec621f95006a7b1101bf2a41f59ed126fdbd3 /mlir/lib/IR | |
| parent | 3ef15a80d2b0647e62771b5adc6e6f639e58f8b3 (diff) | |
| download | bcm5719-llvm-2d22b1e04e7f75ecc38247fc2a5cd18058374cc0.tar.gz bcm5719-llvm-2d22b1e04e7f75ecc38247fc2a5cd18058374cc0.zip | |
Add verifyCompatibleShape function overload with shapes
PiperOrigin-RevId: 285574334
Diffstat (limited to 'mlir/lib/IR')
| -rw-r--r-- | mlir/lib/IR/TypeUtilities.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/mlir/lib/IR/TypeUtilities.cpp b/mlir/lib/IR/TypeUtilities.cpp index 01721418340..54b1bf6329b 100644 --- a/mlir/lib/IR/TypeUtilities.cpp +++ b/mlir/lib/IR/TypeUtilities.cpp @@ -61,6 +61,23 @@ bool mlir::isOpaqueTypeWithName(Type type, StringRef dialect, return false; } +/// Returns success if the given two shapes are compatible. That is, they have +/// the same size and each pair of the elements are equal or one of them is +/// dynamic. +LogicalResult mlir::verifyCompatibleShape(ArrayRef<int64_t> shape1, + ArrayRef<int64_t> shape2) { + if (shape1.size() != shape2.size()) + return failure(); + for (const auto &dims : llvm::zip(shape1, shape2)) { + int64_t dim1 = std::get<0>(dims); + int64_t dim2 = std::get<1>(dims); + if (!ShapedType::isDynamic(dim1) && !ShapedType::isDynamic(dim2) && + dim1 != dim2) + return failure(); + } + return success(); +} + /// Returns success if the given two types have compatible shape. That is, /// they are both scalars (not shaped), or they are both shaped types and at /// least one is unranked or they have compatible dimensions. Dimensions are @@ -79,17 +96,7 @@ LogicalResult mlir::verifyCompatibleShape(Type type1, Type type2) { if (!sType1.hasRank() || !sType2.hasRank()) return success(); - if (sType1.getRank() != sType2.getRank()) - return failure(); - - for (const auto &dims : llvm::zip(sType1.getShape(), sType2.getShape())) { - int64_t dim1 = std::get<0>(dims); - int64_t dim2 = std::get<1>(dims); - if (!ShapedType::isDynamic(dim1) && !ShapedType::isDynamic(dim2) && - dim1 != dim2) - return failure(); - } - return success(); + return verifyCompatibleShape(sType1.getShape(), sType2.getShape()); } OperandElementTypeIterator::OperandElementTypeIterator( |

