//===- transform_interpreter.c - Test of the Transform interpreter C API --===// // // 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-transform-interpreter-test 2>&1 | FileCheck %s #include "mlir-c/Dialect/Transform.h" #include "mlir-c/Dialect/Transform/Interpreter.h" #include "mlir-c/IR.h" #include "mlir-c/Support.h" #include #include int testApplyNamedSequence(MlirContext ctx) { fprintf(stderr, "%s\n", __func__); const char module[] = "module attributes {transform.with_named_sequence} {" " transform.named_sequence @__transform_main(%root: !transform.any_op) {" " transform.print %root { name = \"from interpreter\" }: " "!transform.any_op" " transform.yield" " }" "}"; MlirStringRef moduleStringRef = mlirStringRefCreateFromCString(module); MlirStringRef nameStringRef = mlirStringRefCreateFromCString("inline-module"); MlirOperation root = mlirOperationCreateParse(ctx, moduleStringRef, nameStringRef); if (mlirOperationIsNull(root)) return 1; MlirBlock body = mlirRegionGetFirstBlock(mlirOperationGetRegion(root, 0)); MlirOperation entry = mlirBlockGetFirstOperation(body); MlirTransformOptions options = mlirTransformOptionsCreate(); mlirTransformOptionsEnableExpensiveChecks(options, true); mlirTransformOptionsEnforceSingleTopLevelTransformOp(options, true); MlirLogicalResult result = mlirTransformApplyNamedSequence(root, entry, root, options); mlirTransformOptionsDestroy(options); mlirOperationDestroy(root); if (mlirLogicalResultIsFailure(result)) return 2; return 0; } // CHECK-LABEL: testApplyNamedSequence // CHECK: from interpreter // CHECK: transform.named_sequence @__transform_main // CHECK: transform.print %arg0 // CHECK: transform.yield int main(void) { MlirContext ctx = mlirContextCreate(); mlirDialectHandleRegisterDialect(mlirGetDialectHandle__transform__(), ctx); int result = testApplyNamedSequence(ctx); mlirContextDestroy(ctx); if (result) return result; return EXIT_SUCCESS; }