[mlir] Add a test for default valued dictionary attributes
authorEugene Zhulenev <ezhulenev@google.com>
Thu, 29 Dec 2022 21:24:45 +0000 (13:24 -0800)
committerEugene Zhulenev <ezhulenev@google.com>
Fri, 30 Dec 2022 20:15:54 +0000 (12:15 -0800)
+ Replace special placeholders ($_builder, etc...) in default attribute string

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D140765

mlir/test/mlir-tblgen/op-attribute.td
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp

index 5351db3..012d03c 100644 (file)
@@ -392,6 +392,27 @@ def DOp : NS_Op<"d_op", []> {
 // DEF: odsState.addAttribute(getStrAttrAttrName(odsState.name), odsBuilder.getStringAttr(str_attr));
 // DEF: odsState.addAttribute(getDvStrAttrAttrName(odsState.name), odsBuilder.getStringAttr(dv_str_attr));
 
+
+// Test default dictionary attribute.
+// ---
+
+def DefaultDictAttrOp : NS_Op<"default_dict_attr_op", []> {
+  let arguments = (ins
+    DefaultValuedAttr<DictionaryAttr, "{}">:$empty,
+    DefaultValuedAttr<DictionaryAttr, "getDefaultDictAttrs($_builder)">:$non_empty
+  );
+}
+
+// DEF-LABEL: DefaultDictAttrOp definitions
+// DEF: if (!attributes.get(attrNames[0]))
+// DEF:   attributes.append(attrNames[0], odsBuilder.getDictionaryAttr({}));
+// DEF: if (!attributes.get(attrNames[1]))
+// DEF:   attributes.append(attrNames[1], odsBuilder.getDictionaryAttr(getDefaultDictAttrs(odsBuilder)));
+
+// DECL-LABEL: DefaultDictAttrOp declarations
+// DECL: build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::DictionaryAttr empty, ::mlir::DictionaryAttr non_empty)
+
+
 // Test derived type attr.
 // ---
 def DerivedTypeAttrOp : NS_Op<"derived_type_attr_op", []> {
index 2f88583..204d1d7 100644 (file)
@@ -1725,8 +1725,10 @@ void OpEmitter::genPopulateDefaultAttributes() {
     body << "if (!attributes.get(attrNames[" << index << "])) {\n";
     FmtContext fctx;
     fctx.withBuilder(odsBuilder);
-    std::string defaultValue = std::string(
-        tgfmt(attr.getConstBuilderTemplate(), &fctx, attr.getDefaultValue()));
+
+    std::string defaultValue =
+        std::string(tgfmt(attr.getConstBuilderTemplate(), &fctx,
+                          tgfmt(attr.getDefaultValue(), &fctx)));
     body.indent() << formatv("attributes.append(attrNames[{0}], {1});\n", index,
                              defaultValue);
     body.unindent() << "}\n";