[PATCH] D75411: [mlir][ods] Add query for derived attribute

Jacques Pienaar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 13:44:05 PST 2020


jpienaar updated this revision to Diff 247720.
jpienaar added a comment.
Herald added a subscriber: aartbik.

Switch to using is_contained


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75411/new/

https://reviews.llvm.org/D75411

Files:
  mlir/test/mlir-tblgen/op-attribute.td
  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
@@ -391,6 +391,27 @@
       emitAttrWithReturnType(name, attr);
     }
   }
+
+  // Generate helper method to query whether a named attribute is a derived
+  // attribute. This enables, for example, avoiding adding an attribute that
+  // overlaps with a derived attribute.
+  auto &method =
+      opClass.newMethod("bool", "isDerivedAttribute", "StringRef name");
+  auto &body = method.body();
+  auto derivedAttr = make_filter_range(op.getAttributes(),
+                                       [](const NamedAttribute &namedAttr) {
+                                         return namedAttr.attr.isDerivedAttr();
+                                       });
+  if (derivedAttr.empty()) {
+    body << " return false;";
+  } else {
+    body << " return llvm::is_contained(llvm::makeArrayRef<StringRef>({";
+    mlir::interleaveComma(derivedAttr, body,
+                          [&](const NamedAttribute &namedAttr) {
+                            body << "\"" << namedAttr.name << "\"";
+                          });
+    body << "}));";
+  }
 }
 
 void OpEmitter::genAttrSetters() {
Index: mlir/test/mlir-tblgen/op-attribute.td
===================================================================
--- mlir/test/mlir-tblgen/op-attribute.td
+++ mlir/test/mlir-tblgen/op-attribute.td
@@ -201,6 +201,17 @@
 // DEF: odsState.addAttribute("str_attr", (*odsBuilder).getStringAttr(str_attr));
 // DEF: odsState.addAttribute("dv_str_attr", (*odsBuilder).getStringAttr(dv_str_attr));
 
+// Test derived type attr.
+// ---
+def DerivedTypeAttrOp : NS_Op<"derived_type_attr_op", []> {
+  let results = (outs AnyTensor:$output);
+  DerivedTypeAttr element_dtype = DerivedTypeAttr<"return output().getType();">;
+}
+
+// DECL: bool isDerivedAttribute
+// DEF: bool DerivedTypeAttrOp::isDerivedAttribute(StringRef name) {
+// DEF:  return llvm::is_contained(llvm::makeArrayRef<StringRef>({"element_dtype"}));
+// DEF: }
 
 // Test that only default valued attributes at the end of the arguments
 // list get default values in the builder signature


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75411.247720.patch
Type: text/x-patch
Size: 2251 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200302/f38136e5/attachment.bin>


More information about the llvm-commits mailing list