From 0034f32d6d85d7f21cf04c82083860cdb2fe1ddb Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Mon, 26 Sep 2022 19:08:01 +0100 Subject: Update MLIR files and include LLVM directory --- test/CAPI/CMakeLists.txt | 20 ++++++++++++++++ test/CAPI/lit.local.cfg | 1 + test/CAPI/standalone-capi-test.c | 49 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 test/CAPI/CMakeLists.txt create mode 100644 test/CAPI/lit.local.cfg create mode 100644 test/CAPI/standalone-capi-test.c (limited to 'test/CAPI') diff --git a/test/CAPI/CMakeLists.txt b/test/CAPI/CMakeLists.txt new file mode 100644 index 0000000..eaa6cfc --- /dev/null +++ b/test/CAPI/CMakeLists.txt @@ -0,0 +1,20 @@ +# Here we create a single aggregate shared library with the parts of the CAPI +# that we want to bundle together. Then we link a simple C executable +# against it to demonstrate that it does have the fully self contained +# core MLIR library and our own standalone dialect. +add_mlir_aggregate(StandaloneCAPITestLib + SHARED + EMBED_LIBS + MLIRCAPIIR + # TODO: Remove this in favor of showing fine grained dialect registration + # (once available). + MLIRCAPIRegisterEverything + StandaloneCAPI +) + +add_llvm_executable(standalone-capi-test + standalone-capi-test.c +) +llvm_update_compile_flags(standalone-capi-test) +target_link_libraries(standalone-capi-test + PRIVATE StandaloneCAPITestLib) diff --git a/test/CAPI/lit.local.cfg b/test/CAPI/lit.local.cfg new file mode 100644 index 0000000..f08a0de --- /dev/null +++ b/test/CAPI/lit.local.cfg @@ -0,0 +1 @@ +config.suffixes.add('.c') diff --git a/test/CAPI/standalone-capi-test.c b/test/CAPI/standalone-capi-test.c new file mode 100644 index 0000000..54f3ca7 --- /dev/null +++ b/test/CAPI/standalone-capi-test.c @@ -0,0 +1,49 @@ +//===- standalone-cap-demo.c - Simple demo of 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: standalone-capi-test 2>&1 | FileCheck %s + +#include + +#include "Standalone-c/Dialects.h" +#include "mlir-c/IR.h" +#include "mlir-c/RegisterEverything.h" + +static void registerAllUpstreamDialects(MlirContext ctx) { + MlirDialectRegistry registry = mlirDialectRegistryCreate(); + mlirRegisterAllDialects(registry); + mlirContextAppendDialectRegistry(ctx, registry); + mlirDialectRegistryDestroy(registry); +} + +int main(int argc, char **argv) { + MlirContext ctx = mlirContextCreate(); + // TODO: Create the dialect handles for the builtin dialects and avoid this. + // This adds dozens of MB of binary size over just the standalone dialect. + registerAllUpstreamDialects(ctx); + mlirDialectHandleRegisterDialect(mlirGetDialectHandle__standalone__(), ctx); + + MlirModule module = mlirModuleCreateParse( + ctx, mlirStringRefCreateFromCString("%0 = arith.constant 2 : i32\n" + "%1 = standalone.foo %0 : i32\n")); + if (mlirModuleIsNull(module)) { + printf("ERROR: Could not parse.\n"); + mlirContextDestroy(ctx); + return 1; + } + MlirOperation op = mlirModuleGetOperation(module); + + // CHECK: %[[C:.*]] = arith.constant 2 : i32 + // CHECK: standalone.foo %[[C]] : i32 + mlirOperationDump(op); + + mlirModuleDestroy(module); + mlirContextDestroy(ctx); + return 0; +} -- cgit