[Mlir-commits] [mlir] [mlir] NamedAttribute utility generator (PR #75118)
Mehdi Amini
llvmlistbot at llvm.org
Tue Dec 12 13:32:44 PST 2023
================
@@ -283,6 +283,78 @@ class AttrDef<Dialect dialect, string name, list<Trait> traits = [],
"::" # cppClassName # ">($_self)">;
}
+// Define a StringAttr wrapper for the NamedAttribute `name`
+// - `name` is dialect-scoped when not-inherent.
+// - Utilities to is/has/get/set/lookup/create typed Attr on an Operation
+// including typed `value` attribute
+class NamedAttrDef<Dialect dialect, string name, string userName,
+ string valueAttrType = "::mlir::Attribute">
+ : AttrDef<dialect, name, [], "::mlir::StringAttr"> {
+ let mnemonic = userName;
+
+ string scopedName = dialect.name # "." # mnemonic;
+ code typedefValueAttr = "typedef " # valueAttrType # " ValueAttrType;\n";
+ code getNameFunc = "static constexpr llvm::StringLiteral getScopedName() { return \""
+ # scopedName # "\"; }\n";
+
+ code namedAttrFuncs = !strconcat(typedefValueAttr, getNameFunc, [{
+ // Get name based on inherentness
+ static llvm::StringLiteral getName(Operation *op = nullptr) {
+ if (op && op->getPropertiesStorageSize()) {
+ auto mnemonic = getMnemonic();
+ if (op->getInherentAttr(mnemonic))
+ return mnemonic;
+ }
+ return getScopedName();
+ }
+ // Is or Has
+ static bool is(::mlir::NamedAttribute attr) {
----------------
joker-eph wrote:
Why do we have `is` instead of `==` ? Does this mimic any existing convention on MLIR objects?
https://github.com/llvm/llvm-project/pull/75118
More information about the Mlir-commits
mailing list