[Mlir-commits] [mlir] 21fe8b6 - [mlir] Check if the stride tensor is empty. (#76428)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Jan 3 08:00:20 PST 2024
Author: Balaji V. Iyer
Date: 2024-01-03T10:00:15-06:00
New Revision: 21fe8b635cfb04de486a3c4ca22eb9f5a5ed78ad
URL: https://github.com/llvm/llvm-project/commit/21fe8b635cfb04de486a3c4ca22eb9f5a5ed78ad
DIFF: https://github.com/llvm/llvm-project/commit/21fe8b635cfb04de486a3c4ca22eb9f5a5ed78ad.diff
LOG: [mlir] Check if the stride tensor is empty. (#76428)
Added a check to see if the stride tensor is empty. If so then return
false for isContiguousSlice function.
Possible fix for #74463
Added:
Modified:
mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp b/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
index 2ad992af989c96..c1c0f5483a6af5 100644
--- a/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
+++ b/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
@@ -271,7 +271,7 @@ bool vector::isContiguousSlice(MemRefType memrefType, VectorType vectorType) {
return false;
// Cond 1: A contiguous memref will always have a unit trailing stride.
- if (strides.back() != 1)
+ if (strides.empty() || strides.back() != 1)
return false;
// Cond 2: Strides of a contiguous memref have to match the flattened dims.
diff --git a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
index 3708d741141be0..ae457ea81ec5b1 100644
--- a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
+++ b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
@@ -356,3 +356,18 @@ func.func @fold_unit_dims_entirely(%arg0 : vector<8xi32>,
// CHECK: %[[VAL_3:.*]] = arith.muli %[[VAL_0]], %[[VAL_1]] : vector<8xi32>
// CHECK: %[[VAL_4:.*]] = arith.addi %[[VAL_3]], %[[VAL_2]] : vector<8xi32>
// CHECK: return %[[VAL_4]] : vector<8xi32>
+
+// -----
+
+// This test is to make sure there is no crash for empty stride.
+func.func @stride_empty_test(%1: memref<i16>) -> vector<32x256xi16> {
+ %c0_i16 = arith.constant 0 : i16
+ %3 = vector.transfer_read %1[], %c0_i16 {permutation_map = affine_map<() -> (0, 0)>} : memref<i16>, vector<32x256xi16>
+ return %3 : vector<32x256xi16>
+
+ // CHECK-LABEL: func.func @stride_empty_test
+ // CHECK: %[[VAL:.*]] = arith.constant 0 : i16
+ // CHECK: %[[RET:.*]] = vector.transfer_read {{.*}} vector<32x256xi16>
+ // CHECK: return %[[RET]]
+ // CHECK-NOT: empty()
+}
More information about the Mlir-commits
mailing list