[Mlir-commits] [mlir] [mlir] Check if the stride tensor is empty. (PR #76428)

Balaji V. Iyer. llvmlistbot at llvm.org
Mon Jan 1 20:23:38 PST 2024


https://github.com/bviyer updated https://github.com/llvm/llvm-project/pull/76428

>From dd5d9f8fdf36e26b16b48297a8810068f81a2583 Mon Sep 17 00:00:00 2001
From: "Balaji V. Iyer." <43187390+bviyer at users.noreply.github.com>
Date: Wed, 27 Dec 2023 06:34:28 +0000
Subject: [PATCH 1/3] [mlir] Check if the stride tensor is empty.

Added a check to see if the stride tensor is empty. If so then
return false for isContiguousSlice function.

Possible fix for #74463
---
 mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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.

>From 125d9197a7f2f53a09bc1515e81baef5e68075a2 Mon Sep 17 00:00:00 2001
From: "Balaji V. Iyer" <bviyer at gmail.com>
Date: Wed, 27 Dec 2023 17:39:54 -0600
Subject: [PATCH 2/3] Added a test case

---
 .../test/Dialect/Vector/vector-transfer-flatten.mlir | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
index 3708d741141be0..67adea90d7be95 100644
--- a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
+++ b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
@@ -356,3 +356,15 @@ 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_crash(%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_crash
+  // CHECK: %c0_i16 = arith.constant 0 : i16
+}

>From 8e3d9a34e0f20aec9382551ef06fc9e473fb2aa1 Mon Sep 17 00:00:00 2001
From: "Balaji V. Iyer" <bviyer at gmail.com>
Date: Mon, 1 Jan 2024 22:22:49 -0600
Subject: [PATCH 3/3] Added more checks in the test case. Also added a
 check-not for the error message that comes during the crash.

---
 mlir/test/Dialect/Vector/vector-transfer-flatten.mlir | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
index 67adea90d7be95..ae457ea81ec5b1 100644
--- a/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
+++ b/mlir/test/Dialect/Vector/vector-transfer-flatten.mlir
@@ -360,11 +360,14 @@ func.func @fold_unit_dims_entirely(%arg0 : vector<8xi32>,
 // -----
 
 // This test is to make sure there is no crash for empty stride.
-func.func @stride_empty_crash(%1: memref<i16>) -> vector<32x256xi16> {
+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_crash
-  // CHECK: %c0_i16 = arith.constant 0 : i16
+  // 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