[Mlir-commits] [mlir] 91ab48e - [mlir] Add regions to OpAdaptor
Jacques Pienaar
llvmlistbot at llvm.org
Fri Feb 26 16:25:16 PST 2021
Author: Jacques Pienaar
Date: 2021-02-26T16:25:00-08:00
New Revision: 91ab48ea6baf5e0a653a81afb6ab08e9df84c211
URL: https://github.com/llvm/llvm-project/commit/91ab48ea6baf5e0a653a81afb6ab08e9df84c211
DIFF: https://github.com/llvm/llvm-project/commit/91ab48ea6baf5e0a653a81afb6ab08e9df84c211.diff
LOG: [mlir] Add regions to OpAdaptor
Allows querying regions too via OpAdaptor's generated. This does not yet move region verification to adaptor nor require regions for ops where needed.
Differential Revision: https://reviews.llvm.org/D97519
Added:
mlir/test/mlir-tblgen/op-decl-and-defs.td
Modified:
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
Removed:
mlir/test/mlir-tblgen/op-decl.td
################################################################################
diff --git a/mlir/test/mlir-tblgen/op-decl.td b/mlir/test/mlir-tblgen/op-decl-and-defs.td
similarity index 96%
rename from mlir/test/mlir-tblgen/op-decl.td
rename to mlir/test/mlir-tblgen/op-decl-and-defs.td
index dffb0224a059..220ab8c3792f 100644
--- a/mlir/test/mlir-tblgen/op-decl.td
+++ b/mlir/test/mlir-tblgen/op-decl-and-defs.td
@@ -1,7 +1,9 @@
-// RUN: mlir-tblgen -gen-op-decls -I %S/../../include %s | FileCheck %s
+// RUN: mlir-tblgen -gen-op-decls -I %S/../../include %s | FileCheck %s
// RUN: mlir-tblgen -gen-op-decls -op-include-regex="test.a_op" -I %S/../../include %s | FileCheck %s --check-prefix=REDUCE_INC
// RUN: mlir-tblgen -gen-op-decls -op-exclude-regex="test.a_op" -I %S/../../include %s | FileCheck %s --check-prefix=REDUCE_EXC
+// RUN: mlir-tblgen -gen-op-defs -I %S/../../include %s | FileCheck %s --check-prefix=DEFS
+
include "mlir/IR/OpBase.td"
include "mlir/Interfaces/InferTypeOpInterface.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
@@ -58,6 +60,8 @@ def NS_AOp : NS_Op<"a_op", [IsolatedFromAbove, IsolatedFromAbove]> {
// CHECK: ::mlir::ValueRange b();
// CHECK: ::mlir::IntegerAttr attr1();
// CHECK: ::mlir::FloatAttr attr2();
+// CHECK: ::mlir::Region &someRegion();
+// CHECK: ::mlir::RegionRange someRegions();
// CHECK: private:
// CHECK: ::mlir::ValueRange odsOperands;
// CHECK: };
@@ -96,6 +100,13 @@ def NS_AOp : NS_Op<"a_op", [IsolatedFromAbove, IsolatedFromAbove]> {
// CHECK: void displayGraph();
// CHECK: };
+// DEFS-LABEL: NS::AOp definitions
+
+// DEFS: AOpAdaptor::AOpAdaptor(::mlir::ValueRange values, ::mlir::DictionaryAttr attrs, ::mlir::RegionRange regions) : odsOperands(values), odsAttrs(attrs), odsRegions(regions)
+// DEFS: ::mlir::RegionRange AOpAdaptor::getRegions()
+// DEFS: ::mlir::RegionRange AOpAdaptor::someRegions()
+// DEFS-NEXT: return odsRegions.drop_front(1);
+
// Check AttrSizedOperandSegments
// ---
diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
index 8c124280989f..9fc6ecf456b0 100644
--- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
@@ -2246,6 +2246,7 @@ OpOperandAdaptorEmitter::OpOperandAdaptorEmitter(const Operator &op)
: op(op), adaptor(op.getAdaptorName()) {
adaptor.newField("::mlir::ValueRange", "odsOperands");
adaptor.newField("::mlir::DictionaryAttr", "odsAttrs");
+ adaptor.newField("::mlir::RegionRange", "odsRegions");
const auto *attrSizedOperands =
op.getTrait("::mlir::OpTrait::AttrSizedOperandSegments");
{
@@ -2253,10 +2254,12 @@ OpOperandAdaptorEmitter::OpOperandAdaptorEmitter(const Operator &op)
paramList.emplace_back("::mlir::ValueRange", "values");
paramList.emplace_back("::mlir::DictionaryAttr", "attrs",
attrSizedOperands ? "" : "nullptr");
+ paramList.emplace_back("::mlir::RegionRange", "regions", "{}");
auto *constructor = adaptor.addConstructorAndPrune(std::move(paramList));
constructor->addMemberInitializer("odsOperands", "values");
constructor->addMemberInitializer("odsAttrs", "attrs");
+ constructor->addMemberInitializer("odsRegions", "regions");
}
{
@@ -2264,8 +2267,13 @@ OpOperandAdaptorEmitter::OpOperandAdaptorEmitter(const Operator &op)
llvm::formatv("{0}&", op.getCppClassName()).str(), "op");
constructor->addMemberInitializer("odsOperands", "op->getOperands()");
constructor->addMemberInitializer("odsAttrs", "op->getAttrDictionary()");
+ constructor->addMemberInitializer("odsRegions", "op->getRegions()");
}
+ {
+ auto *m = adaptor.addMethodAndPrune("::mlir::ValueRange", "getOperands");
+ m->body() << " return odsOperands;";
+ }
std::string sizeAttrInit =
formatv(adapterSegmentSizeAttrInitCode, "operand_segment_sizes");
generateNamedOperandGetters(op, adaptor, sizeAttrInit,
@@ -2299,6 +2307,11 @@ OpOperandAdaptorEmitter::OpOperandAdaptorEmitter(const Operator &op)
body << " return attr;\n";
};
+ {
+ auto *m =
+ adaptor.addMethodAndPrune("::mlir::DictionaryAttr", "getAttributes");
+ m->body() << " return odsAttrs;";
+ }
for (auto &namedAttr : op.getAttributes()) {
const auto &name = namedAttr.name;
const auto &attr = namedAttr.attr;
@@ -2306,6 +2319,27 @@ OpOperandAdaptorEmitter::OpOperandAdaptorEmitter(const Operator &op)
emitAttr(name, attr);
}
+ unsigned numRegions = op.getNumRegions();
+ if (numRegions > 0) {
+ auto *m = adaptor.addMethodAndPrune("::mlir::RegionRange", "getRegions");
+ m->body() << " return odsRegions;";
+ }
+ for (unsigned i = 0; i < numRegions; ++i) {
+ const auto ®ion = op.getRegion(i);
+ if (region.name.empty())
+ continue;
+
+ // Generate the accessors for a variadic region.
+ if (region.isVariadic()) {
+ auto *m = adaptor.addMethodAndPrune("::mlir::RegionRange", region.name);
+ m->body() << formatv(" return odsRegions.drop_front({0});", i);
+ continue;
+ }
+
+ auto *m = adaptor.addMethodAndPrune("::mlir::Region &", region.name);
+ m->body() << formatv(" return *odsRegions[{0}];", i);
+ }
+
// Add verification function.
addVerification();
}
More information about the Mlir-commits
mailing list