[Mlir-commits] [mlir] 66e0f66 - [MLIR][Shape] Canonicalize subsequent `size_to_index` and `index_to_size`
Frederik Gossen
llvmlistbot at llvm.org
Thu Jun 25 05:44:01 PDT 2020
Author: Frederik Gossen
Date: 2020-06-25T12:43:17Z
New Revision: 66e0f66d8ffb9d889ccb3a411c2d1e04a5e0ec41
URL: https://github.com/llvm/llvm-project/commit/66e0f66d8ffb9d889ccb3a411c2d1e04a5e0ec41
DIFF: https://github.com/llvm/llvm-project/commit/66e0f66d8ffb9d889ccb3a411c2d1e04a5e0ec41.diff
LOG: [MLIR][Shape] Canonicalize subsequent `size_to_index` and `index_to_size`
Eliminate the subsequent applications of `size_to_index` and `index_to_size`.
Differential Revision: https://reviews.llvm.org/D82083
Added:
Modified:
mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
mlir/lib/Dialect/Shape/IR/Shape.cpp
mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td
mlir/test/Dialect/Shape/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
index 21d76a3c14e7..1fb88a791b70 100644
--- a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
+++ b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
@@ -249,6 +249,7 @@ def Shape_IndexToSizeOp : Shape_Op<"index_to_size", [NoSideEffect]> {
let assemblyFormat = "$arg attr-dict";
let hasFolder = 1;
+ let hasCanonicalizer = 1;
}
def Shape_JoinOp : Shape_Op<"join", []> {
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index b1f804356f0e..e251a3887cd4 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -397,6 +397,11 @@ OpFoldResult IndexToSizeOp::fold(ArrayRef<Attribute> operands) {
return {};
}
+void IndexToSizeOp::getCanonicalizationPatterns(
+ OwningRewritePatternList &patterns, MLIRContext *context) {
+ patterns.insert<SizeToIndexToSizeCanonicalization>(context);
+}
+
//===----------------------------------------------------------------------===//
// FromExtentsOp
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td b/mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td
index 43ea27f169b5..b03e51299907 100644
--- a/mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td
+++ b/mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td
@@ -22,3 +22,7 @@ def IndexToSizeToIndexCanonicalization : Pat<
(Shape_SizeToIndexOp (Shape_IndexToSizeOp $arg)),
(replaceWithValue $arg)>;
+def SizeToIndexToSizeCanonicalization : Pat<
+ (Shape_IndexToSizeOp (Shape_SizeToIndexOp $arg)),
+ (replaceWithValue $arg)>;
+
diff --git a/mlir/test/Dialect/Shape/canonicalize.mlir b/mlir/test/Dialect/Shape/canonicalize.mlir
index 1da1b70a90a3..1b9f3924b8b0 100644
--- a/mlir/test/Dialect/Shape/canonicalize.mlir
+++ b/mlir/test/Dialect/Shape/canonicalize.mlir
@@ -503,3 +503,15 @@ func @index_to_size_to_index(%index : index) -> index {
return %result : index
}
+// -----
+
+// Canonicalize redundant conversion from `size` to `index` and back.
+// CHECK-LABEL: @size_to_index_to_size
+// CHECK-SAME: (%[[SIZE:.*]]: !shape.size) -> !shape.size
+func @size_to_index_to_size(%size : !shape.size) -> !shape.size {
+ // CHECK: return %[[SIZE]] : !shape.size
+ %idx = shape.size_to_index %size
+ %result = shape.index_to_size %idx
+ return %result : !shape.size
+}
+
More information about the Mlir-commits
mailing list