diff --git a/mlir/include/mlir-c/Dialect/IRDL.h b/mlir/include/mlir-c/Dialect/IRDL.h index c4d6ffd989af9..d87ab864fb33f 100644 --- a/mlir/include/mlir-c/Dialect/IRDL.h +++ b/mlir/include/mlir-c/Dialect/IRDL.h @@ -22,6 +22,20 @@ MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(IRDL, irdl); /// the module's associated context. MLIR_CAPI_EXPORTED MlirLogicalResult mlirLoadIRDLDialects(MlirModule module); +//===----------------------------------------------------------------------===// +// VariadicityAttr +//===----------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED MlirAttribute +mlirIRDLVariadicityAttrGet(MlirContext ctx, MlirStringRef value); + +//===----------------------------------------------------------------------===// +// VariadicityArrayAttr +//===----------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED MlirAttribute mlirIRDLVariadicityArrayAttrGet( + MlirContext ctx, intptr_t nValues, MlirAttribute const *values); + #ifdef __cplusplus } #endif diff --git a/mlir/lib/CAPI/Dialect/IRDL.cpp b/mlir/lib/CAPI/Dialect/IRDL.cpp index cb9dc8ceb6795..43f420bf6db05 100644 --- a/mlir/lib/CAPI/Dialect/IRDL.cpp +++ b/mlir/lib/CAPI/Dialect/IRDL.cpp @@ -16,3 +16,30 @@ MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IRDL, irdl, mlir::irdl::IRDLDialect) MlirLogicalResult mlirLoadIRDLDialects(MlirModule module) { return wrap(mlir::irdl::loadDialects(unwrap(module))); } + +//===----------------------------------------------------------------------===// +// VariadicityAttr +//===----------------------------------------------------------------------===// + +MlirAttribute mlirIRDLVariadicityAttrGet(MlirContext ctx, MlirStringRef value) { + return wrap(mlir::irdl::VariadicityAttr::get( + unwrap(ctx), mlir::irdl::symbolizeVariadicity(unwrap(value)).value())); +} + +//===----------------------------------------------------------------------===// +// VariadicityArrayAttr +//===----------------------------------------------------------------------===// + +MlirAttribute mlirIRDLVariadicityArrayAttrGet(MlirContext ctx, intptr_t nValues, + MlirAttribute const *values) { + llvm::SmallVector attrs; + llvm::ArrayRef unwrappedAttrs = + unwrapList(nValues, values, attrs); + + llvm::SmallVector variadicities; + for (auto attr : unwrappedAttrs) + variadicities.push_back(llvm::cast(attr)); + + return wrap( + mlir::irdl::VariadicityArrayAttr::get(unwrap(ctx), variadicities)); +} diff --git a/mlir/test/CAPI/irdl.c b/mlir/test/CAPI/irdl.c index ad52ece6a41ce..20cf35f2501ff 100644 --- a/mlir/test/CAPI/irdl.c +++ b/mlir/test/CAPI/irdl.c @@ -12,6 +12,7 @@ #include "mlir-c/Dialect/IRDL.h" #include "mlir-c/IR.h" +#include "mlir-c/Support.h" const char irdlDialect[] = "\ irdl.dialect @foo {\ @@ -37,10 +38,39 @@ const char newDialectUsage[] = "\ \"bar.op\"(%res) : (i32) -> ()\ }"; +void testVariadicityAttributes(MlirContext ctx) { + MlirAttribute variadicitySingle = + mlirIRDLVariadicityAttrGet(ctx, mlirStringRefCreateFromCString("single")); + + // CHECK: #irdl + mlirAttributeDump(variadicitySingle); + + MlirAttribute variadicityOptional = mlirIRDLVariadicityAttrGet( + ctx, mlirStringRefCreateFromCString("optional")); + + // CHECK: #irdl + mlirAttributeDump(variadicityOptional); + + MlirAttribute variadicityVariadic = mlirIRDLVariadicityAttrGet( + ctx, mlirStringRefCreateFromCString("variadic")); + + // CHECK: #irdl + mlirAttributeDump(variadicityVariadic); + + MlirAttribute variadicities[] = {variadicitySingle, variadicityOptional, + variadicityVariadic}; + MlirAttribute variadicityArray = + mlirIRDLVariadicityArrayAttrGet(ctx, 3, variadicities); + + // CHECK: #irdl + mlirAttributeDump(variadicityArray); +} + int main(void) { MlirContext ctx = mlirContextCreate(); mlirDialectHandleLoadDialect(mlirGetDialectHandle__irdl__(), ctx); + // Test loading an IRDL dialect and using it. MlirModule dialectDecl = mlirModuleCreateParse(ctx, mlirStringRefCreateFromCString(irdlDialect)); @@ -53,6 +83,10 @@ int main(void) { mlirOperationDump(mlirModuleGetOperation(usingModule)); mlirModuleDestroy(usingModule); + + // Test variadicity attributes. + testVariadicityAttributes(ctx); + mlirContextDestroy(ctx); return 0; }