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