Author: Mehdi Amini Date: 2020-12-11T22:38:48Z New Revision: aadcb26ee1650de8eaddc5a141c4302691c446a1
URL: https://github.com/llvm/llvm-project/commit/aadcb26ee1650de8eaddc5a141c4302691c446a1 DIFF: https://github.com/llvm/llvm-project/commit/aadcb26ee1650de8eaddc5a141c4302691c446a1.diff LOG: Store a MlirIdentifier instead of a MlirStringRef in MlirNameAttribute This mirror the C++ API for NamedAttribute, and has the advantage or internalizing earlier in the Context and not requiring the caller to keep the StringRef alive beyong this call. Differential Revision: https://reviews.llvm.org/D93133 Added: Modified: mlir/include/mlir-c/IR.h mlir/lib/Bindings/Python/IRModules.cpp mlir/lib/CAPI/IR/BuiltinAttributes.cpp mlir/lib/CAPI/IR/IR.cpp mlir/test/CAPI/ir.c Removed: ################################################################################ diff --git a/mlir/include/mlir-c/IR.h b/mlir/include/mlir-c/IR.h index 02d1e54d20e5..74c90af5b4d5 100644 --- a/mlir/include/mlir-c/IR.h +++ b/mlir/include/mlir-c/IR.h @@ -70,7 +70,7 @@ DEFINE_C_API_STRUCT(MlirValue, const void); * a string. */ struct MlirNamedAttribute { - MlirStringRef name; + MlirIdentifier name; MlirAttribute attribute; }; typedef struct MlirNamedAttribute MlirNamedAttribute; @@ -600,7 +600,7 @@ MLIR_CAPI_EXPORTED void mlirAttributePrint(MlirAttribute attr, MLIR_CAPI_EXPORTED void mlirAttributeDump(MlirAttribute attr); /// Associates an attribute with the name. Takes ownership of neither. -MLIR_CAPI_EXPORTED MlirNamedAttribute mlirNamedAttributeGet(MlirStringRef name, +MLIR_CAPI_EXPORTED MlirNamedAttribute mlirNamedAttributeGet(MlirIdentifier name, MlirAttribute attr); //===----------------------------------------------------------------------===// diff --git a/mlir/lib/Bindings/Python/IRModules.cpp b/mlir/lib/Bindings/Python/IRModules.cpp index 5ebb2e4ccee3..66443bf89072 100644 --- a/mlir/lib/Bindings/Python/IRModules.cpp +++ b/mlir/lib/Bindings/Python/IRModules.cpp @@ -962,8 +962,10 @@ py::object PyOperation::create( llvm::SmallVector<MlirNamedAttribute, 4> mlirNamedAttributes; mlirNamedAttributes.reserve(mlirAttributes.size()); for (auto &it : mlirAttributes) - mlirNamedAttributes.push_back( - mlirNamedAttributeGet(toMlirStringRef(it.first), it.second)); + mlirNamedAttributes.push_back(mlirNamedAttributeGet( + mlirIdentifierGet(mlirAttributeGetContext(it.second), + toMlirStringRef(it.first)), + it.second)); mlirOperationStateAddAttributes(&state, mlirNamedAttributes.size(), mlirNamedAttributes.data()); } @@ -1134,7 +1136,10 @@ PyAttribute PyAttribute::createFromCapsule(py::object capsule) { PyNamedAttribute::PyNamedAttribute(MlirAttribute attr, std::string ownedName) : ownedName(new std::string(std::move(ownedName))) { - namedAttr = mlirNamedAttributeGet(toMlirStringRef(*this->ownedName), attr); + namedAttr = mlirNamedAttributeGet( + mlirIdentifierGet(mlirAttributeGetContext(attr), + toMlirStringRef(*this->ownedName)), + attr); } //------------------------------------------------------------------------------ @@ -1373,8 +1378,9 @@ class PyOpAttributeMap { } MlirNamedAttribute namedAttr = mlirOperationGetAttribute(operation->get(), index); - return PyNamedAttribute(namedAttr.attribute, - std::string(namedAttr.name.data)); + return PyNamedAttribute( + namedAttr.attribute, + std::string(mlirIdentifierStr(namedAttr.name).data)); } void dunderSetItem(const std::string &name, PyAttribute attr) { @@ -3137,7 +3143,8 @@ void mlir::python::populateIRSubmodule(py::module &m) { [](PyNamedAttribute &self) { PyPrintAccumulator printAccum; printAccum.parts.append("NamedAttribute("); - printAccum.parts.append(self.namedAttr.name.data); + printAccum.parts.append( + mlirIdentifierStr(self.namedAttr.name).data); printAccum.parts.append("="); mlirAttributePrint(self.namedAttr.attribute, printAccum.getCallback(), @@ -3148,8 +3155,8 @@ void mlir::python::populateIRSubmodule(py::module &m) { .def_property_readonly( "name", [](PyNamedAttribute &self) { - return py::str(self.namedAttr.name.data, - self.namedAttr.name.length); + return py::str(mlirIdentifierStr(self.namedAttr.name).data, + mlirIdentifierStr(self.namedAttr.name).length); }, "The name of the NamedAttribute binding") .def_property_readonly( diff --git a/mlir/lib/CAPI/IR/BuiltinAttributes.cpp b/mlir/lib/CAPI/IR/BuiltinAttributes.cpp index 8db4ac3d3a38..90ed9cb0ad02 100644 --- a/mlir/lib/CAPI/IR/BuiltinAttributes.cpp +++ b/mlir/lib/CAPI/IR/BuiltinAttributes.cpp @@ -82,7 +82,7 @@ MlirNamedAttribute mlirDictionaryAttrGetElement(MlirAttribute attr, intptr_t pos) { NamedAttribute attribute = unwrap(attr).cast<DictionaryAttr>().getValue()[pos]; - return {wrap(attribute.first.strref()), wrap(attribute.second)}; + return {wrap(attribute.first), wrap(attribute.second)}; } MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr, diff --git a/mlir/lib/CAPI/IR/IR.cpp b/mlir/lib/CAPI/IR/IR.cpp index c34da0daeb5a..c5a78a2235fc 100644 --- a/mlir/lib/CAPI/IR/IR.cpp +++ b/mlir/lib/CAPI/IR/IR.cpp @@ -308,7 +308,7 @@ intptr_t mlirOperationGetNumAttributes(MlirOperation op) { MlirNamedAttribute mlirOperationGetAttribute(MlirOperation op, intptr_t pos) { NamedAttribute attr = unwrap(op)->getAttrs()[pos]; - return MlirNamedAttribute{wrap(attr.first.strref()), wrap(attr.second)}; + return MlirNamedAttribute{wrap(attr.first), wrap(attr.second)}; } MlirAttribute mlirOperationGetAttributeByName(MlirOperation op, @@ -586,7 +586,7 @@ void mlirAttributePrint(MlirAttribute attr, MlirStringCallback callback, void mlirAttributeDump(MlirAttribute attr) { unwrap(attr).dump(); } -MlirNamedAttribute mlirNamedAttributeGet(MlirStringRef name, +MlirNamedAttribute mlirNamedAttributeGet(MlirIdentifier name, MlirAttribute attr) { return MlirNamedAttribute{name, attr}; } diff --git a/mlir/test/CAPI/ir.c b/mlir/test/CAPI/ir.c index 1bfd5b4f326c..a785d6ab4899 100644 --- a/mlir/test/CAPI/ir.c +++ b/mlir/test/CAPI/ir.c @@ -89,10 +89,12 @@ MlirModule makeAndDumpAdd(MlirContext ctx, MlirLocation location) { MlirAttribute funcNameAttr = mlirAttributeParseGet(ctx, mlirStringRefCreateFromCString("\"add\"")); MlirNamedAttribute funcAttrs[] = { - mlirNamedAttributeGet(mlirStringRefCreateFromCString("type"), - funcTypeAttr), - mlirNamedAttributeGet(mlirStringRefCreateFromCString("sym_name"), - funcNameAttr)}; + mlirNamedAttributeGet( + mlirIdentifierGet(ctx, mlirStringRefCreateFromCString("type")), + funcTypeAttr), + mlirNamedAttributeGet( + mlirIdentifierGet(ctx, mlirStringRefCreateFromCString("sym_name")), + funcNameAttr)}; MlirOperationState funcState = mlirOperationStateGet(mlirStringRefCreateFromCString("func"), location); mlirOperationStateAddAttributes(&funcState, 2, funcAttrs); @@ -105,7 +107,8 @@ MlirModule makeAndDumpAdd(MlirContext ctx, MlirLocation location) { MlirAttribute indexZeroLiteral = mlirAttributeParseGet(ctx, mlirStringRefCreateFromCString("0 : index")); MlirNamedAttribute indexZeroValueAttr = mlirNamedAttributeGet( - mlirStringRefCreateFromCString("value"), indexZeroLiteral); + mlirIdentifierGet(ctx, mlirStringRefCreateFromCString("value")), + indexZeroLiteral); MlirOperationState constZeroState = mlirOperationStateGet( mlirStringRefCreateFromCString("std.constant"), location); mlirOperationStateAddResults(&constZeroState, 1, &indexType); @@ -130,7 +133,8 @@ MlirModule makeAndDumpAdd(MlirContext ctx, MlirLocation location) { MlirAttribute indexOneLiteral = mlirAttributeParseGet(ctx, mlirStringRefCreateFromCString("1 : index")); MlirNamedAttribute indexOneValueAttr = mlirNamedAttributeGet( - mlirStringRefCreateFromCString("value"), indexOneLiteral); + mlirIdentifierGet(ctx, mlirStringRefCreateFromCString("value")), + indexOneLiteral); MlirOperationState constOneState = mlirOperationStateGet( mlirStringRefCreateFromCString("std.constant"), location); mlirOperationStateAddResults(&constOneState, 1, &indexType); @@ -375,8 +379,8 @@ static void printFirstOfEach(MlirContext ctx, MlirOperation operation) { // CHECK: Get attr 0: 0 : index // Now re-get the attribute by name. - MlirAttribute attr0ByName = - mlirOperationGetAttributeByName(operation, namedAttr0.name); + MlirAttribute attr0ByName = mlirOperationGetAttributeByName( + operation, mlirIdentifierStr(namedAttr0.name)); fprintf(stderr, "Get attr 0 by name: "); mlirAttributePrint(attr0ByName, printToStderr, NULL); fprintf(stderr, "\n"); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits