diff --git a/mlir/lib/ExecutionEngine/RunnerUtils.cpp b/mlir/lib/ExecutionEngine/RunnerUtils.cpp --- a/mlir/lib/ExecutionEngine/RunnerUtils.cpp +++ b/mlir/lib/ExecutionEngine/RunnerUtils.cpp @@ -106,6 +106,8 @@ _mlir_ciface_print_memref_f64(&descriptor); } +extern "C" void print_c_string(char *str) { printf("%s", str); } + extern "C" void _mlir_ciface_print_memref_0d_f32(StridedMemRefType *M) { impl::printMemRef(*M); diff --git a/mlir/test/mlir-cpu-runner/print.mlir b/mlir/test/mlir-cpu-runner/print.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/mlir-cpu-runner/print.mlir @@ -0,0 +1,19 @@ +// RUN: mlir-opt %s -pass-pipeline="convert-func-to-llvm,reconcile-unrealized-casts" \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext,%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + + +llvm.mlir.global internal constant @str_global("String to print\0A") +llvm.func @print_c_string(!llvm.ptr) + +func @main() { + %0 = llvm.mlir.addressof @str_global : !llvm.ptr> + %1 = llvm.mlir.constant(0 : index) : i64 + %2 = llvm.getelementptr %0[%1, %1] + : (!llvm.ptr>, i64, i64) -> !llvm.ptr + llvm.call @print_c_string(%2) : (!llvm.ptr) -> () + return +} + +// CHECK: String to print