xref: /llvm-project/mlir/test/CAPI/irdl.c (revision 69d3ba3db922fca8cfc47b5f115b6bea6a737aab)
11337622aSThéo Degioanni //===- irdl.c - Test for the C bindings for IRDL registration -------------===//
21337622aSThéo Degioanni //
31337622aSThéo Degioanni // Part of the LLVM Project, under the Apache License v2.0 with LLVM
41337622aSThéo Degioanni // Exceptions.
51337622aSThéo Degioanni // See https://llvm.org/LICENSE.txt for license information.
61337622aSThéo Degioanni // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
71337622aSThéo Degioanni //
81337622aSThéo Degioanni //===----------------------------------------------------------------------===//
91337622aSThéo Degioanni 
101337622aSThéo Degioanni /* RUN: mlir-capi-irdl-test 2>&1 | FileCheck %s
111337622aSThéo Degioanni  */
121337622aSThéo Degioanni 
131337622aSThéo Degioanni #include "mlir-c/Dialect/IRDL.h"
141337622aSThéo Degioanni #include "mlir-c/IR.h"
151337622aSThéo Degioanni 
161337622aSThéo Degioanni const char irdlDialect[] = "\
171337622aSThéo Degioanni   irdl.dialect @foo {\
181337622aSThéo Degioanni     irdl.operation @op {\
191337622aSThéo Degioanni       %i32 = irdl.is i32\
20*69d3ba3dSThéo Degioanni       irdl.results(baz: %i32)\
211337622aSThéo Degioanni     }\
221337622aSThéo Degioanni   }\
231337622aSThéo Degioanni   irdl.dialect @bar {\
241337622aSThéo Degioanni     irdl.operation @op {\
251337622aSThéo Degioanni       %i32 = irdl.is i32\
26*69d3ba3dSThéo Degioanni       irdl.operands(baz: %i32)\
271337622aSThéo Degioanni     }\
281337622aSThéo Degioanni   }";
291337622aSThéo Degioanni 
301337622aSThéo Degioanni // CHECK:      module {
311337622aSThéo Degioanni // CHECK-NEXT:   %[[RES:.*]] = "foo.op"() : () -> i32
321337622aSThéo Degioanni // CHECK-NEXT:   "bar.op"(%[[RES]]) :  (i32) -> ()
331337622aSThéo Degioanni // CHECK-NEXT: }
341337622aSThéo Degioanni const char newDialectUsage[] = "\
351337622aSThéo Degioanni   module {\
361337622aSThéo Degioanni     %res = \"foo.op\"() : () -> i32\
371337622aSThéo Degioanni     \"bar.op\"(%res) : (i32) -> ()\
381337622aSThéo Degioanni   }";
391337622aSThéo Degioanni 
401337622aSThéo Degioanni int main(void) {
411337622aSThéo Degioanni   MlirContext ctx = mlirContextCreate();
421337622aSThéo Degioanni   mlirDialectHandleLoadDialect(mlirGetDialectHandle__irdl__(), ctx);
431337622aSThéo Degioanni 
441337622aSThéo Degioanni   MlirModule dialectDecl =
451337622aSThéo Degioanni       mlirModuleCreateParse(ctx, mlirStringRefCreateFromCString(irdlDialect));
461337622aSThéo Degioanni 
471337622aSThéo Degioanni   mlirLoadIRDLDialects(dialectDecl);
481337622aSThéo Degioanni   mlirModuleDestroy(dialectDecl);
491337622aSThéo Degioanni 
501337622aSThéo Degioanni   MlirModule usingModule = mlirModuleCreateParse(
511337622aSThéo Degioanni       ctx, mlirStringRefCreateFromCString(newDialectUsage));
521337622aSThéo Degioanni 
531337622aSThéo Degioanni   mlirOperationDump(mlirModuleGetOperation(usingModule));
541337622aSThéo Degioanni 
551337622aSThéo Degioanni   mlirModuleDestroy(usingModule);
561337622aSThéo Degioanni   mlirContextDestroy(ctx);
571337622aSThéo Degioanni   return 0;
581337622aSThéo Degioanni }
59