[HW] Add Python bindings for InnerRefAttr.

This adds the necessary CAPI boilerplate and a basic Python type for
holding InnerRefAttr.
This commit is contained in:
Mike Urbach 2021-12-21 15:48:49 -07:00
parent c5c8f79152
commit 9f7a01a865
4 changed files with 26 additions and 0 deletions

View File

@ -108,6 +108,10 @@ MLIR_CAPI_EXPORTED MlirStringRef hwTypeAliasTypeGetScope(MlirType typeAlias);
// Attribute API.
//===----------------------------------------------------------------------===//
MLIR_CAPI_EXPORTED bool hwAttrIsAInnerRefAttr(MlirAttribute);
MLIR_CAPI_EXPORTED MlirAttribute hwInnerRefAttrGet(MlirAttribute moduleName,
MlirAttribute innerSym);
MLIR_CAPI_EXPORTED bool hwAttrIsAParamDeclAttr(MlirAttribute);
MLIR_CAPI_EXPORTED MlirAttribute hwParamDeclAttrGet(MlirStringRef name,
MlirAttribute type,

View File

@ -79,3 +79,8 @@ with Context() as ctx, Location.unknown():
pverbatim = hw.ParamVerbatimAttr.get(StringAttr.get("this is verbatim"))
# CHECK: #hw.param.verbatim<"this is verbatim">
print(pverbatim)
inner_ref = hw.InnerRefAttr.get(StringAttr.get("some_module"),
StringAttr.get("some_instance"))
# CHECK: #hw.innerNameRef<@some_module::@some_instance>
print(inner_ref)

View File

@ -138,4 +138,10 @@ void circt::python::populateDialectHWSubmodule(py::module &m) {
.def_classmethod("get", [](py::object cls, MlirAttribute text) {
return cls(hwParamVerbatimAttrGet(text));
});
mlir_attribute_subclass(m, "InnerRefAttr", hwAttrIsAInnerRefAttr)
.def_classmethod("get", [](py::object cls, MlirAttribute moduleName,
MlirAttribute innerSym) {
return cls(hwInnerRefAttrGet(moduleName, innerSym));
});
}

View File

@ -134,6 +134,17 @@ MlirStringRef hwTypeAliasTypeGetScope(MlirType typeAlias) {
// Attribute API.
//===----------------------------------------------------------------------===//
bool hwAttrIsAInnerRefAttr(MlirAttribute attr) {
return unwrap(attr).isa<InnerRefAttr>();
}
MlirAttribute hwInnerRefAttrGet(MlirAttribute moduleName,
MlirAttribute innerSym) {
auto moduleNameAttr = unwrap(moduleName).cast<StringAttr>();
auto innerSymAttr = unwrap(innerSym).cast<StringAttr>();
return wrap(InnerRefAttr::get(moduleNameAttr, innerSymAttr));
}
MLIR_CAPI_EXPORTED bool hwAttrIsAParamDeclAttr(MlirAttribute attr) {
return unwrap(attr).isa<ParamDeclAttr>();
}