[PATCH] D74143: [MLIR] Adding attribute setters generation for table gen
Alexandre Eichenberger via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 7 11:40:08 PST 2020
AlexEichenberger updated this revision to Diff 243253.
AlexEichenberger marked an inline comment as done.
AlexEichenberger added a comment.
updated style
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74143/new/
https://reviews.llvm.org/D74143
Files:
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
Index: mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
===================================================================
--- mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+++ mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
@@ -171,6 +171,9 @@
// Generates getters for the attributes.
void genAttrGetters();
+ // Generates setter for the attributes.
+ void genAttrSetters();
+
// Generates getters for named operands.
void genNamedOperandGetters();
@@ -300,6 +303,7 @@
genNamedResultGetters();
genNamedRegionGetters();
genAttrGetters();
+ genAttrSetters();
genBuilder();
genParser();
genPrinter();
@@ -381,6 +385,27 @@
}
}
+// Generate raw named setter type. This is a wrapper class that allows
+// setting to the attributes via setters instead of having to use
+// the string interface for better compile time verification.
+void OpEmitter::genAttrSetters() {
+ FmtContext fctx;
+ fctx.withBuilder("mlir::Builder(this->getContext())");
+ auto emitAttrWithStorageType = [&](StringRef name, Attribute attr) {
+ auto &method = opClass.newMethod("void", (name + "Attr").str(),
+ (attr.getStorageType() + " attr").str());
+ auto &body = method.body();
+ body << " this->setAttr(\"" << name << "\", attr);";
+ };
+
+ for (auto &namedAttr : op.getAttributes()) {
+ const auto &name = namedAttr.name;
+ const auto &attr = namedAttr.attr;
+ if (!attr.isDerivedAttr())
+ emitAttrWithStorageType(name, attr);
+ }
+}
+
// Generates the named operand getter methods for the given Operator `op` and
// puts them in `opClass`. Uses `rangeType` as the return type of getters that
// return a range of operands (individual operands are `Value ` and each
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74143.243253.patch
Type: text/x-patch
Size: 1742 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200207/8e410291/attachment.bin>
More information about the llvm-commits
mailing list