[Mlir-commits] [mlir] 9df6afb - [MLIR][Shape] Lower `shape.any`
Frederik Gossen
llvmlistbot at llvm.org
Mon Jul 13 01:30:42 PDT 2020
Author: Frederik Gossen
Date: 2020-07-13T08:30:05Z
New Revision: 9df6afbb5c99c103ef27614a8987934ef82f110f
URL: https://github.com/llvm/llvm-project/commit/9df6afbb5c99c103ef27614a8987934ef82f110f
DIFF: https://github.com/llvm/llvm-project/commit/9df6afbb5c99c103ef27614a8987934ef82f110f.diff
LOG: [MLIR][Shape] Lower `shape.any`
Lower `shape.any` to its first operand.
Differential Revision: https://reviews.llvm.org/D83123
Added:
Modified:
mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
mlir/lib/Conversion/ShapeToStandard/ShapeToStandardPatterns.td
mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
index 7ebcb397349d..f82019989e70 100644
--- a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
+++ b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
@@ -23,6 +23,22 @@ namespace {
#include "ShapeToStandardPatterns.inc"
/// Conversion patterns.
+class AnyOpConversion : public OpConversionPattern<AnyOp> {
+public:
+ using OpConversionPattern<AnyOp>::OpConversionPattern;
+
+ LogicalResult
+ matchAndRewrite(AnyOp op, ArrayRef<Value> operands,
+ ConversionPatternRewriter &rewriter) const override {
+ AnyOp::Adaptor transformed(operands);
+
+ // Replace `any` with its first operand.
+ // Any operand would be a valid substitution.
+ rewriter.replaceOp(op, {transformed.inputs().front()});
+ return success();
+ }
+};
+
template <typename SrcOpTy, typename DstOpTy>
class BinaryOpConversion : public OpConversionPattern<SrcOpTy> {
public:
@@ -181,6 +197,7 @@ void mlir::populateShapeToStandardConversionPatterns(
populateWithGenerated(ctx, &patterns);
// clang-format off
patterns.insert<
+ AnyOpConversion,
BinaryOpConversion<AddOp, AddIOp>,
BinaryOpConversion<MulOp, MulIOp>,
ConstSizeOpConverter,
diff --git a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandardPatterns.td b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandardPatterns.td
index a1335487f5ab..30bed6d7fb65 100644
--- a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandardPatterns.td
+++ b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandardPatterns.td
@@ -18,4 +18,3 @@ def IndexToSizeOpConversion : Pat<
def SizeToIndexOpConversion : Pat<
(Shape_SizeToIndexOp $arg),
(replaceWithValue $arg)>;
-
diff --git a/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir b/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
index 28ef190d09eb..22206637adbf 100644
--- a/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
+++ b/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
@@ -158,3 +158,26 @@ func @get_extent_from_extent_tensor(%extents : tensor<?xindex>,
return %result : !shape.size
}
+// -----
+
+// Lower `any` to its first operand.
+// CHECK-LABEL: @any_of_three
+// CHECK-SAME: (%[[A:.*]]: tensor<?xindex>, %[[B:.*]]: tensor<?xindex>, %[[C:.*]]: tensor<?xindex>) -> tensor<?xindex>
+func @any_of_three(%a : !shape.shape, %b : !shape.shape, %c : !shape.shape)
+ -> !shape.shape {
+ // CHECK: return %[[A]] : tensor<?xindex>
+ %result = shape.any %a, %b, %c
+ return %result : !shape.shape
+}
+
+// -----
+
+// Lower `any` to its first operand.
+// CHECK-LABEL: @any_of_one
+// CHECK-SAME: (%[[A:.*]]: tensor<?xindex>) -> tensor<?xindex>
+func @any_of_one(%a : !shape.shape) -> !shape.shape {
+ // CHECK: return %[[A]] : tensor<?xindex>
+ %result = shape.any %a
+ return %result : !shape.shape
+}
+
More information about the Mlir-commits
mailing list