Skip to content

Commit b3a5ad1

Browse files
authored
[MLIR][IRDL] Add C API for IRDL Variadicity attributes. (llvm#171076)
This add the basic APIs to create VariadicityAttr and VariadicityArrayAttr attributes from the C API. This is necessary for C API users that want to create IRDL dialect declarations.
1 parent 2d0c14c commit b3a5ad1

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

mlir/include/mlir-c/Dialect/IRDL.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(IRDL, irdl);
2222
/// the module's associated context.
2323
MLIR_CAPI_EXPORTED MlirLogicalResult mlirLoadIRDLDialects(MlirModule module);
2424

25+
//===----------------------------------------------------------------------===//
26+
// VariadicityAttr
27+
//===----------------------------------------------------------------------===//
28+
29+
MLIR_CAPI_EXPORTED MlirAttribute
30+
mlirIRDLVariadicityAttrGet(MlirContext ctx, MlirStringRef value);
31+
32+
//===----------------------------------------------------------------------===//
33+
// VariadicityArrayAttr
34+
//===----------------------------------------------------------------------===//
35+
36+
MLIR_CAPI_EXPORTED MlirAttribute mlirIRDLVariadicityArrayAttrGet(
37+
MlirContext ctx, intptr_t nValues, MlirAttribute const *values);
38+
2539
#ifdef __cplusplus
2640
}
2741
#endif

mlir/lib/CAPI/Dialect/IRDL.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,30 @@ MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IRDL, irdl, mlir::irdl::IRDLDialect)
1616
MlirLogicalResult mlirLoadIRDLDialects(MlirModule module) {
1717
return wrap(mlir::irdl::loadDialects(unwrap(module)));
1818
}
19+
20+
//===----------------------------------------------------------------------===//
21+
// VariadicityAttr
22+
//===----------------------------------------------------------------------===//
23+
24+
MlirAttribute mlirIRDLVariadicityAttrGet(MlirContext ctx, MlirStringRef value) {
25+
return wrap(mlir::irdl::VariadicityAttr::get(
26+
unwrap(ctx), mlir::irdl::symbolizeVariadicity(unwrap(value)).value()));
27+
}
28+
29+
//===----------------------------------------------------------------------===//
30+
// VariadicityArrayAttr
31+
//===----------------------------------------------------------------------===//
32+
33+
MlirAttribute mlirIRDLVariadicityArrayAttrGet(MlirContext ctx, intptr_t nValues,
34+
MlirAttribute const *values) {
35+
llvm::SmallVector<mlir::Attribute> attrs;
36+
llvm::ArrayRef<mlir::Attribute> unwrappedAttrs =
37+
unwrapList(nValues, values, attrs);
38+
39+
llvm::SmallVector<mlir::irdl::VariadicityAttr> variadicities;
40+
for (auto attr : unwrappedAttrs)
41+
variadicities.push_back(llvm::cast<mlir::irdl::VariadicityAttr>(attr));
42+
43+
return wrap(
44+
mlir::irdl::VariadicityArrayAttr::get(unwrap(ctx), variadicities));
45+
}

mlir/test/CAPI/irdl.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "mlir-c/Dialect/IRDL.h"
1414
#include "mlir-c/IR.h"
15+
#include "mlir-c/Support.h"
1516

1617
const char irdlDialect[] = "\
1718
irdl.dialect @foo {\
@@ -37,10 +38,39 @@ const char newDialectUsage[] = "\
3738
\"bar.op\"(%res) : (i32) -> ()\
3839
}";
3940

41+
void testVariadicityAttributes(MlirContext ctx) {
42+
MlirAttribute variadicitySingle =
43+
mlirIRDLVariadicityAttrGet(ctx, mlirStringRefCreateFromCString("single"));
44+
45+
// CHECK: #irdl<variadicity single>
46+
mlirAttributeDump(variadicitySingle);
47+
48+
MlirAttribute variadicityOptional = mlirIRDLVariadicityAttrGet(
49+
ctx, mlirStringRefCreateFromCString("optional"));
50+
51+
// CHECK: #irdl<variadicity optional>
52+
mlirAttributeDump(variadicityOptional);
53+
54+
MlirAttribute variadicityVariadic = mlirIRDLVariadicityAttrGet(
55+
ctx, mlirStringRefCreateFromCString("variadic"));
56+
57+
// CHECK: #irdl<variadicity variadic>
58+
mlirAttributeDump(variadicityVariadic);
59+
60+
MlirAttribute variadicities[] = {variadicitySingle, variadicityOptional,
61+
variadicityVariadic};
62+
MlirAttribute variadicityArray =
63+
mlirIRDLVariadicityArrayAttrGet(ctx, 3, variadicities);
64+
65+
// CHECK: #irdl<variadicity_array[ single, optional, variadic]>
66+
mlirAttributeDump(variadicityArray);
67+
}
68+
4069
int main(void) {
4170
MlirContext ctx = mlirContextCreate();
4271
mlirDialectHandleLoadDialect(mlirGetDialectHandle__irdl__(), ctx);
4372

73+
// Test loading an IRDL dialect and using it.
4474
MlirModule dialectDecl =
4575
mlirModuleCreateParse(ctx, mlirStringRefCreateFromCString(irdlDialect));
4676

@@ -53,6 +83,10 @@ int main(void) {
5383
mlirOperationDump(mlirModuleGetOperation(usingModule));
5484

5585
mlirModuleDestroy(usingModule);
86+
87+
// Test variadicity attributes.
88+
testVariadicityAttributes(ctx);
89+
5690
mlirContextDestroy(ctx);
5791
return 0;
5892
}

0 commit comments

Comments
 (0)