[Mlir-commits] [mlir] 7b57517 - [mlir][linalg] Fixed issue generating reassociation map with Rank-0 types
Rob Suderman
llvmlistbot at llvm.org
Wed May 12 11:07:11 PDT 2021
Author: Rob Suderman
Date: 2021-05-12T11:00:51-07:00
New Revision: 7b57517507929a5d23fde4776aeb792ee0e9c293
URL: https://github.com/llvm/llvm-project/commit/7b57517507929a5d23fde4776aeb792ee0e9c293
DIFF: https://github.com/llvm/llvm-project/commit/7b57517507929a5d23fde4776aeb792ee0e9c293.diff
LOG: [mlir][linalg] Fixed issue generating reassociation map with Rank-0 types
Rank-0 case causes a graph during linalg reshape operation.
Differential Revision: https://reviews.llvm.org/D102282
Added:
Modified:
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
mlir/test/Dialect/Linalg/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
index 5f635c7ebaf91..1801f277069e3 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
@@ -1134,10 +1134,12 @@ mlir::linalg::getReassociationIndicesForReshape(ShapedType sourceType,
return llvm::None;
currIndices.push_back(sourceDim++);
- // If there are no dimensions in the target to match, then append the
- // `currIndices` to the last element of the reassociationMap.
+ // If the reassociation is empty but the currIndices is not, this by
+ // definition is folding unit-dimensions with the result being scalar type.
+ // So only append the `currIndices` if reassociation map is not empty.
if (targetDim == targetShape.size()) {
- reassociationMap.back().append(currIndices.begin(), currIndices.end());
+ if (!reassociationMap.empty() && !currIndices.empty())
+ reassociationMap.back().append(currIndices.begin(), currIndices.end());
// Break out of the loops. We should be done here.
break;
}
diff --git a/mlir/test/Dialect/Linalg/canonicalize.mlir b/mlir/test/Dialect/Linalg/canonicalize.mlir
index 536e361a72065..cb5f54adcbb87 100644
--- a/mlir/test/Dialect/Linalg/canonicalize.mlir
+++ b/mlir/test/Dialect/Linalg/canonicalize.mlir
@@ -43,6 +43,17 @@ func @memref_cast_into_tiled_loop(%arg0: memref<192xf32>) {
// -----
+// CHECK-LABEL: zero_rank_reshape_multi
+func @zero_rank_reshape_multi(%arg0: tensor<f32>) -> tensor<f32> {
+ // CHECK: return %arg0
+ %0 = linalg.tensor_reshape %arg0 [] : tensor<f32> into tensor<1xf32>
+ %1 = linalg.tensor_reshape %0 [[0, 1]] : tensor<1xf32> into tensor<1x1xf32>
+ %2 = linalg.tensor_reshape %1 [] : tensor<1x1xf32> into tensor<f32>
+ return %2 : tensor<f32>
+}
+
+// -----
+
func @collapsing_tensor_reshapes(%arg0 : tensor<?x?x?x?x?xf32>) -> tensor<?x?xf32>
{
%0 = linalg.tensor_reshape %arg0 [[0, 1], [2], [3, 4]]
More information about the Mlir-commits
mailing list