Théo Degioanni 69d3ba3db9
[mlir][irdl] Introduce names in IRDL value lists (#123525)
In order to meaningfully generate getters and setters from IRDL, it
makes sense to embed the names of operands, results, etc. in the IR
definition. This PR introduces this feature. Names are constrained
similarly to TableGen names.
2025-01-19 21:58:52 +01:00

59 lines
1.5 KiB
C

//===- irdl.c - Test for the C bindings for IRDL registration -------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM
// Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
/* RUN: mlir-capi-irdl-test 2>&1 | FileCheck %s
*/
#include "mlir-c/Dialect/IRDL.h"
#include "mlir-c/IR.h"
const char irdlDialect[] = "\
irdl.dialect @foo {\
irdl.operation @op {\
%i32 = irdl.is i32\
irdl.results(baz: %i32)\
}\
}\
irdl.dialect @bar {\
irdl.operation @op {\
%i32 = irdl.is i32\
irdl.operands(baz: %i32)\
}\
}";
// CHECK: module {
// CHECK-NEXT: %[[RES:.*]] = "foo.op"() : () -> i32
// CHECK-NEXT: "bar.op"(%[[RES]]) : (i32) -> ()
// CHECK-NEXT: }
const char newDialectUsage[] = "\
module {\
%res = \"foo.op\"() : () -> i32\
\"bar.op\"(%res) : (i32) -> ()\
}";
int main(void) {
MlirContext ctx = mlirContextCreate();
mlirDialectHandleLoadDialect(mlirGetDialectHandle__irdl__(), ctx);
MlirModule dialectDecl =
mlirModuleCreateParse(ctx, mlirStringRefCreateFromCString(irdlDialect));
mlirLoadIRDLDialects(dialectDecl);
mlirModuleDestroy(dialectDecl);
MlirModule usingModule = mlirModuleCreateParse(
ctx, mlirStringRefCreateFromCString(newDialectUsage));
mlirOperationDump(mlirModuleGetOperation(usingModule));
mlirModuleDestroy(usingModule);
mlirContextDestroy(ctx);
return 0;
}