[Mlir-commits] [mlir] 80be54c - [mlir] Lower Shape binary ops (AddOp, MulOp) to Standard.
Alexander Belyaev
llvmlistbot at llvm.org
Mon Jun 8 08:52:40 PDT 2020
Author: Alexander Belyaev
Date: 2020-06-08T17:48:01+02:00
New Revision: 80be54c08f6c2185fde854c0aabb48971489fdb6
URL: https://github.com/llvm/llvm-project/commit/80be54c08f6c2185fde854c0aabb48971489fdb6
DIFF: https://github.com/llvm/llvm-project/commit/80be54c08f6c2185fde854c0aabb48971489fdb6.diff
LOG: [mlir] Lower Shape binary ops (AddOp, MulOp) to Standard.
Differential Revision: https://reviews.llvm.org/D81344
Added:
Modified:
mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
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 5c74cdcaa241..81293a028489 100644
--- a/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
+++ b/mlir/lib/Conversion/ShapeToStandard/ShapeToStandard.cpp
@@ -15,10 +15,26 @@
#include "mlir/Transforms/DialectConversion.h"
using namespace mlir;
+using namespace mlir::shape;
namespace {
/// Conversion patterns.
+template <typename SrcOpTy, typename DstOpTy>
+class BinaryOpConversion : public OpConversionPattern<SrcOpTy> {
+public:
+ using OpConversionPattern<SrcOpTy>::OpConversionPattern;
+
+ LogicalResult
+ matchAndRewrite(SrcOpTy op, ArrayRef<Value> operands,
+ ConversionPatternRewriter &rewriter) const override {
+ typename SrcOpTy::OperandAdaptor adaptor(operands);
+ rewriter.replaceOpWithNewOp<DstOpTy>(op.getOperation(), adaptor.lhs(),
+ adaptor.rhs());
+ return success();
+ }
+};
+
class FromExtentTensorOpConversion
: public OpConversionPattern<shape::FromExtentTensorOp> {
public:
@@ -128,6 +144,8 @@ void mlir::populateShapeToStandardConversionPatterns(
OwningRewritePatternList &patterns, MLIRContext *ctx) {
// clang-format off
patterns.insert<
+ BinaryOpConversion<AddOp, AddIOp>,
+ BinaryOpConversion<MulOp, MulIOp>,
FromExtentTensorOpConversion,
IndexToSizeOpConversion,
SizeToIndexOpConversion,
diff --git a/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir b/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
index de420a96a70f..fd1f980c5369 100644
--- a/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
+++ b/mlir/test/Conversion/ShapeToStandard/shape-to-standard.mlir
@@ -62,3 +62,16 @@ func @from_extent_tensor(%tensor : tensor<?xindex>) -> !shape.shape {
: (tensor<?xindex>) -> !shape.shape
return %shape : !shape.shape
}
+
+// -----
+
+// Lower binary ops.
+// CHECK-LABEL: @binary_ops
+// CHECK-SAME: (%[[LHS:.*]]: index, %[[RHS:.*]]: index)
+func @binary_ops(%lhs : !shape.size, %rhs : !shape.size) {
+ %sum = "shape.add"(%lhs, %rhs) : (!shape.size, !shape.size) -> !shape.size
+ // CHECK-NEXT: addi %[[LHS]], %[[RHS]] : index
+ %product = shape.mul %lhs, %rhs
+ // CHECK-NEXT: muli %[[LHS]], %[[RHS]] : index
+ return
+}
More information about the Mlir-commits
mailing list