xref: /llvm-project/mlir/test/CAPI/transform_interpreter.c (revision fd4efecac21d92428d2f804f43e85bdfa460bdd5)
191f11611SOleksandr "Alex" Zinenko //===- transform_interpreter.c - Test of the Transform interpreter C API --===//
291f11611SOleksandr "Alex" Zinenko //
391f11611SOleksandr "Alex" Zinenko // Part of the LLVM Project, under the Apache License v2.0 with LLVM
491f11611SOleksandr "Alex" Zinenko // Exceptions.
591f11611SOleksandr "Alex" Zinenko // See https://llvm.org/LICENSE.txt for license information.
691f11611SOleksandr "Alex" Zinenko // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
791f11611SOleksandr "Alex" Zinenko //
891f11611SOleksandr "Alex" Zinenko //===----------------------------------------------------------------------===//
991f11611SOleksandr "Alex" Zinenko 
1091f11611SOleksandr "Alex" Zinenko // RUN: mlir-capi-transform-interpreter-test 2>&1 | FileCheck %s
1191f11611SOleksandr "Alex" Zinenko 
1291f11611SOleksandr "Alex" Zinenko #include "mlir-c/Dialect/Transform.h"
1391f11611SOleksandr "Alex" Zinenko #include "mlir-c/Dialect/Transform/Interpreter.h"
1491f11611SOleksandr "Alex" Zinenko #include "mlir-c/IR.h"
1591f11611SOleksandr "Alex" Zinenko #include "mlir-c/Support.h"
1691f11611SOleksandr "Alex" Zinenko 
1791f11611SOleksandr "Alex" Zinenko #include <stdio.h>
1891f11611SOleksandr "Alex" Zinenko #include <stdlib.h>
1991f11611SOleksandr "Alex" Zinenko 
testApplyNamedSequence(MlirContext ctx)2091f11611SOleksandr "Alex" Zinenko int testApplyNamedSequence(MlirContext ctx) {
21*fd4efecaSKai Sasaki   fprintf(stderr, "%s\n", __func__);
2291f11611SOleksandr "Alex" Zinenko 
2391f11611SOleksandr "Alex" Zinenko   const char module[] =
2491f11611SOleksandr "Alex" Zinenko       "module attributes {transform.with_named_sequence} {"
2591f11611SOleksandr "Alex" Zinenko       "  transform.named_sequence @__transform_main(%root: !transform.any_op) {"
2691f11611SOleksandr "Alex" Zinenko       "    transform.print %root { name = \"from interpreter\" }: "
2791f11611SOleksandr "Alex" Zinenko       "!transform.any_op"
2891f11611SOleksandr "Alex" Zinenko       "    transform.yield"
2991f11611SOleksandr "Alex" Zinenko       "  }"
3091f11611SOleksandr "Alex" Zinenko       "}";
3191f11611SOleksandr "Alex" Zinenko 
3291f11611SOleksandr "Alex" Zinenko   MlirStringRef moduleStringRef = mlirStringRefCreateFromCString(module);
3391f11611SOleksandr "Alex" Zinenko   MlirStringRef nameStringRef = mlirStringRefCreateFromCString("inline-module");
3491f11611SOleksandr "Alex" Zinenko 
3591f11611SOleksandr "Alex" Zinenko   MlirOperation root =
3691f11611SOleksandr "Alex" Zinenko       mlirOperationCreateParse(ctx, moduleStringRef, nameStringRef);
3791f11611SOleksandr "Alex" Zinenko   if (mlirOperationIsNull(root))
3891f11611SOleksandr "Alex" Zinenko     return 1;
3991f11611SOleksandr "Alex" Zinenko   MlirBlock body = mlirRegionGetFirstBlock(mlirOperationGetRegion(root, 0));
4091f11611SOleksandr "Alex" Zinenko   MlirOperation entry = mlirBlockGetFirstOperation(body);
4191f11611SOleksandr "Alex" Zinenko 
4291f11611SOleksandr "Alex" Zinenko   MlirTransformOptions options = mlirTransformOptionsCreate();
4391f11611SOleksandr "Alex" Zinenko   mlirTransformOptionsEnableExpensiveChecks(options, true);
4491f11611SOleksandr "Alex" Zinenko   mlirTransformOptionsEnforceSingleTopLevelTransformOp(options, true);
4591f11611SOleksandr "Alex" Zinenko 
4691f11611SOleksandr "Alex" Zinenko   MlirLogicalResult result =
4791f11611SOleksandr "Alex" Zinenko       mlirTransformApplyNamedSequence(root, entry, root, options);
4891f11611SOleksandr "Alex" Zinenko   mlirTransformOptionsDestroy(options);
496e20cb55SAlex Zinenko   mlirOperationDestroy(root);
5091f11611SOleksandr "Alex" Zinenko   if (mlirLogicalResultIsFailure(result))
5191f11611SOleksandr "Alex" Zinenko     return 2;
5291f11611SOleksandr "Alex" Zinenko 
5391f11611SOleksandr "Alex" Zinenko   return 0;
5491f11611SOleksandr "Alex" Zinenko }
5591f11611SOleksandr "Alex" Zinenko // CHECK-LABEL: testApplyNamedSequence
5691f11611SOleksandr "Alex" Zinenko // CHECK: from interpreter
5791f11611SOleksandr "Alex" Zinenko // CHECK: transform.named_sequence @__transform_main
5891f11611SOleksandr "Alex" Zinenko // CHECK:   transform.print %arg0
5991f11611SOleksandr "Alex" Zinenko // CHECK:   transform.yield
6091f11611SOleksandr "Alex" Zinenko 
main(void)6191f11611SOleksandr "Alex" Zinenko int main(void) {
6291f11611SOleksandr "Alex" Zinenko   MlirContext ctx = mlirContextCreate();
6391f11611SOleksandr "Alex" Zinenko   mlirDialectHandleRegisterDialect(mlirGetDialectHandle__transform__(), ctx);
6491f11611SOleksandr "Alex" Zinenko   int result = testApplyNamedSequence(ctx);
6591f11611SOleksandr "Alex" Zinenko   mlirContextDestroy(ctx);
6691f11611SOleksandr "Alex" Zinenko   if (result)
6791f11611SOleksandr "Alex" Zinenko     return result;
6891f11611SOleksandr "Alex" Zinenko 
6991f11611SOleksandr "Alex" Zinenko   return EXIT_SUCCESS;
7091f11611SOleksandr "Alex" Zinenko }
71