[Mlir-commits] [mlir] 2159141 - [MLIR][Shape] Add support for `OpAsmInterface` in `shape.const_size`
Frederik Gossen
llvmlistbot at llvm.org
Mon Jun 8 03:28:16 PDT 2020
Author: Frederik Gossen
Date: 2020-06-08T10:27:28Z
New Revision: 215914151e01adb785098c77aeae3afd99a558f5
URL: https://github.com/llvm/llvm-project/commit/215914151e01adb785098c77aeae3afd99a558f5
DIFF: https://github.com/llvm/llvm-project/commit/215914151e01adb785098c77aeae3afd99a558f5.diff
LOG: [MLIR][Shape] Add support for `OpAsmInterface` in `shape.const_size`
The SSA values created with `shape.const_size` are now named depending on the
value.
A constant size of 3, e.g., is now automatically named `%c3`.
Differential Revision: https://reviews.llvm.org/D81249
Added:
Modified:
mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
mlir/lib/Dialect/Shape/IR/Shape.cpp
mlir/test/Dialect/Shape/ops.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
index f484aed81fe4..c51423eacb02 100644
--- a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
+++ b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
@@ -17,6 +17,7 @@ include "mlir/Dialect/Shape/IR/ShapeBase.td"
include "mlir/Interfaces/ControlFlowInterfaces.td"
include "mlir/Interfaces/InferTypeOpInterface.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
+include "mlir/IR/OpAsmInterface.td"
def Shape_WitnessType : DialectType<ShapeDialect,
CPred<"$_self.isa<::mlir::shape::WitnessType>()">, "witness">,
@@ -110,7 +111,11 @@ def Shape_ConstShapeOp : Shape_Op<"const_shape", [ConstantLike, NoSideEffect]> {
let hasFolder = 1;
}
-def Shape_ConstSizeOp : Shape_Op<"const_size", [ConstantLike, NoSideEffect]> {
+def Shape_ConstSizeOp : Shape_Op<"const_size", [
+ ConstantLike,
+ NoSideEffect,
+ DeclareOpInterfaceMethods<OpAsmOpInterface>
+ ]> {
let summary = "Creates a constant of type `shape.size`";
let description = [{
Creates a `shape.size` type representing the constant size given by `value`.
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index cc95a96b114f..c46df3a6c7bc 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -13,6 +13,7 @@
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/StandardTypes.h"
+#include "llvm/ADT/SmallString.h"
#include "llvm/Support/raw_ostream.h"
using namespace mlir;
@@ -352,6 +353,14 @@ OpFoldResult CstrEqOp::fold(ArrayRef<Attribute> operands) {
OpFoldResult ConstSizeOp::fold(ArrayRef<Attribute>) { return valueAttr(); }
+void ConstSizeOp::getAsmResultNames(
+ llvm::function_ref<void(Value, StringRef)> setNameFn) {
+ SmallString<4> buffer;
+ llvm::raw_svector_ostream os(buffer);
+ os << "c" << value();
+ setNameFn(getResult(), os.str());
+}
+
//===----------------------------------------------------------------------===//
// ConstWitnessOp
//===----------------------------------------------------------------------===//
diff --git a/mlir/test/Dialect/Shape/ops.mlir b/mlir/test/Dialect/Shape/ops.mlir
index 51919ac2ed27..d25a7f01535e 100644
--- a/mlir/test/Dialect/Shape/ops.mlir
+++ b/mlir/test/Dialect/Shape/ops.mlir
@@ -91,3 +91,13 @@ func @test_mul(%lhs: !shape.size, %rhs: !shape.size) -> !shape.size {
%product = shape.mul %lhs, %rhs
return %product: !shape.size
}
+
+func @const_size() {
+ // CHECK: %c1 = shape.const_size 1
+ // CHECK: %c2 = shape.const_size 2
+ // CHECK: %c2_0 = shape.const_size 2
+ %0 = shape.const_size 1
+ %1 = shape.const_size 2
+ %2 = shape.const_size 2
+ return
+}
More information about the Mlir-commits
mailing list