[Mlir-commits] [mlir] 7bc6c4a - [mlir][print]Add functions for printing memref f16/bf16/i16 (#75094)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Dec 14 10:06:29 PST 2023
Author: Yinying Li
Date: 2023-12-14T13:06:25-05:00
New Revision: 7bc6c4abe8e8d8ab70e02e4c2025a94dda01d908
URL: https://github.com/llvm/llvm-project/commit/7bc6c4abe8e8d8ab70e02e4c2025a94dda01d908
DIFF: https://github.com/llvm/llvm-project/commit/7bc6c4abe8e8d8ab70e02e4c2025a94dda01d908.diff
LOG: [mlir][print]Add functions for printing memref f16/bf16/i16 (#75094)
1. Added functions for printMemrefI16/f16/bf16.
2. Added a new integration test for all the printMemref functions.
Added:
mlir/test/Integration/Dialect/Memref/print-memref.mlir
Modified:
mlir/include/mlir/ExecutionEngine/RunnerUtils.h
mlir/lib/ExecutionEngine/CMakeLists.txt
mlir/lib/ExecutionEngine/RunnerUtils.cpp
utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
Removed:
################################################################################
diff --git a/mlir/include/mlir/ExecutionEngine/RunnerUtils.h b/mlir/include/mlir/ExecutionEngine/RunnerUtils.h
index f998ed53b3403b..b426465c5192a7 100644
--- a/mlir/include/mlir/ExecutionEngine/RunnerUtils.h
+++ b/mlir/include/mlir/ExecutionEngine/RunnerUtils.h
@@ -38,6 +38,7 @@
#include <iostream>
#include "mlir/ExecutionEngine/CRunnerUtils.h"
+#include "mlir/ExecutionEngine/Float16bits.h"
template <typename T, typename StreamType>
void printMemRefMetaData(StreamType &os, const DynamicMemRefType<T> &v) {
@@ -369,10 +370,16 @@ _mlir_ciface_printMemrefShapeC64(UnrankedMemRefType<impl::complex64> *m);
extern "C" MLIR_RUNNERUTILS_EXPORT void
_mlir_ciface_printMemrefI8(UnrankedMemRefType<int8_t> *m);
extern "C" MLIR_RUNNERUTILS_EXPORT void
+_mlir_ciface_printMemrefI16(UnrankedMemRefType<int16_t> *m);
+extern "C" MLIR_RUNNERUTILS_EXPORT void
_mlir_ciface_printMemrefI32(UnrankedMemRefType<int32_t> *m);
extern "C" MLIR_RUNNERUTILS_EXPORT void
_mlir_ciface_printMemrefI64(UnrankedMemRefType<int64_t> *m);
extern "C" MLIR_RUNNERUTILS_EXPORT void
+_mlir_ciface_printMemrefF16(UnrankedMemRefType<f16> *m);
+extern "C" MLIR_RUNNERUTILS_EXPORT void
+_mlir_ciface_printMemrefBF16(UnrankedMemRefType<bf16> *m);
+extern "C" MLIR_RUNNERUTILS_EXPORT void
_mlir_ciface_printMemrefF32(UnrankedMemRefType<float> *m);
extern "C" MLIR_RUNNERUTILS_EXPORT void
_mlir_ciface_printMemrefF64(UnrankedMemRefType<double> *m);
diff --git a/mlir/lib/ExecutionEngine/CMakeLists.txt b/mlir/lib/ExecutionEngine/CMakeLists.txt
index 70c5a07ad1ab23..2f391b7698cbb0 100644
--- a/mlir/lib/ExecutionEngine/CMakeLists.txt
+++ b/mlir/lib/ExecutionEngine/CMakeLists.txt
@@ -157,6 +157,9 @@ if(LLVM_ENABLE_PIC)
RunnerUtils.cpp
EXCLUDE_FROM_LIBMLIR
+
+ LINK_LIBS PUBLIC
+ mlir_float16_utils
)
target_compile_definitions(mlir_runner_utils PRIVATE mlir_runner_utils_EXPORTS)
diff --git a/mlir/lib/ExecutionEngine/RunnerUtils.cpp b/mlir/lib/ExecutionEngine/RunnerUtils.cpp
index bbfd3a6b11c2a1..378aa7ce35ef16 100644
--- a/mlir/lib/ExecutionEngine/RunnerUtils.cpp
+++ b/mlir/lib/ExecutionEngine/RunnerUtils.cpp
@@ -81,6 +81,10 @@ extern "C" void _mlir_ciface_printMemrefI8(UnrankedMemRefType<int8_t> *M) {
impl::printMemRef(*M);
}
+extern "C" void _mlir_ciface_printMemrefI16(UnrankedMemRefType<int16_t> *M) {
+ impl::printMemRef(*M);
+}
+
extern "C" void _mlir_ciface_printMemrefI32(UnrankedMemRefType<int32_t> *M) {
impl::printMemRef(*M);
}
@@ -89,6 +93,14 @@ extern "C" void _mlir_ciface_printMemrefI64(UnrankedMemRefType<int64_t> *M) {
impl::printMemRef(*M);
}
+extern "C" void _mlir_ciface_printMemrefF16(UnrankedMemRefType<f16> *M) {
+ impl::printMemRef(*M);
+}
+
+extern "C" void _mlir_ciface_printMemrefBF16(UnrankedMemRefType<bf16> *M) {
+ impl::printMemRef(*M);
+}
+
extern "C" void _mlir_ciface_printMemrefF32(UnrankedMemRefType<float> *M) {
impl::printMemRef(*M);
}
diff --git a/mlir/test/Integration/Dialect/Memref/print-memref.mlir b/mlir/test/Integration/Dialect/Memref/print-memref.mlir
new file mode 100644
index 00000000000000..b83f3919efd83e
--- /dev/null
+++ b/mlir/test/Integration/Dialect/Memref/print-memref.mlir
@@ -0,0 +1,128 @@
+// RUN: mlir-opt %s \
+// RUN: -func-bufferize -arith-bufferize --canonicalize \
+// RUN: -finalize-memref-to-llvm\
+// RUN: -convert-func-to-llvm -reconcile-unrealized-casts |\
+// RUN: mlir-cpu-runner \
+// RUN: -e entry -entry-point-result=void \
+// RUN: -shared-libs=%mlir_c_runner_utils,%mlir_runner_utils |\
+// RUN: FileCheck %s
+
+module {
+
+ func.func private @printMemrefI8(%ptr : tensor<*xi8>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefI16(%ptr : tensor<*xi16>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefI32(%ptr : tensor<*xi32>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefI64(%ptr : tensor<*xi64>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefBF16(%ptr : tensor<*xbf16>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefF16(%ptr : tensor<*xf16>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefF32(%ptr : tensor<*xf32>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefF64(%ptr : tensor<*xf64>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefC32(%ptr : tensor<*xcomplex<f32>>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefC64(%ptr : tensor<*xcomplex<f64>>) attributes { llvm.emit_c_interface }
+ func.func private @printMemrefInd(%ptr : tensor<*xindex>) attributes { llvm.emit_c_interface }
+
+ func.func @entry() {
+ %i8 = arith.constant dense<90> : tensor<3x3xi8>
+ %i16 = arith.constant dense<1> : tensor<3x3xi16>
+ %i32 = arith.constant dense<2> : tensor<3x3xi32>
+ %i64 = arith.constant dense<3> : tensor<3x3xi64>
+ %f16 = arith.constant dense<1.5> : tensor<3x3xf16>
+ %bf16 = arith.constant dense<2.5> : tensor<3x3xbf16>
+ %f32 = arith.constant dense<3.5> : tensor<3x3xf32>
+ %f64 = arith.constant dense<4.5> : tensor<3x3xf64>
+ %c32 = arith.constant dense<(1.000000e+01,5.000000e+00)> : tensor<3x3xcomplex<f32>>
+ %c64 = arith.constant dense<(2.000000e+01,5.000000e+00)> : tensor<3x3xcomplex<f64>>
+ %ind = arith.constant dense<4> : tensor<3x3xindex>
+
+ %1 = tensor.cast %i8 : tensor<3x3xi8> to tensor<*xi8>
+ %2 = tensor.cast %i16 : tensor<3x3xi16> to tensor<*xi16>
+ %3 = tensor.cast %i32 : tensor<3x3xi32> to tensor<*xi32>
+ %4 = tensor.cast %i64 : tensor<3x3xi64> to tensor<*xi64>
+ %5 = tensor.cast %f16 : tensor<3x3xf16> to tensor<*xf16>
+ %6 = tensor.cast %bf16 : tensor<3x3xbf16> to tensor<*xbf16>
+ %7 = tensor.cast %f32 : tensor<3x3xf32> to tensor<*xf32>
+ %8 = tensor.cast %f64 : tensor<3x3xf64> to tensor<*xf64>
+ %9 = tensor.cast %c32 : tensor<3x3xcomplex<f32>> to tensor<*xcomplex<f32>>
+ %10 = tensor.cast %c64 : tensor<3x3xcomplex<f64>> to tensor<*xcomplex<f64>>
+ %11 = tensor.cast %ind : tensor<3x3xindex> to tensor<*xindex>
+
+ // CHECK: data =
+ // CHECK-NEXT: {{\[}}[Z, Z, Z],
+ // CHECK-NEXT: [Z, Z, Z],
+ // CHECK-NEXT: [Z, Z, Z]]
+ //
+ call @printMemrefI8(%1) : (tensor<*xi8>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[1, 1, 1],
+ // CHECK-NEXT: [1, 1, 1],
+ // CHECK-NEXT: [1, 1, 1]]
+ //
+ call @printMemrefI16(%2) : (tensor<*xi16>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[2, 2, 2],
+ // CHECK-NEXT: [2, 2, 2],
+ // CHECK-NEXT: [2, 2, 2]]
+ //
+ call @printMemrefI32(%3) : (tensor<*xi32>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[3, 3, 3],
+ // CHECK-NEXT: [3, 3, 3],
+ // CHECK-NEXT: [3, 3, 3]]
+ //
+ call @printMemrefI64(%4) : (tensor<*xi64>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[1.5, 1.5, 1.5],
+ // CHECK-NEXT: [1.5, 1.5, 1.5],
+ // CHECK-NEXT: [1.5, 1.5, 1.5]]
+ //
+ call @printMemrefF16(%5) : (tensor<*xf16>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[2.5, 2.5, 2.5],
+ // CHECK-NEXT: [2.5, 2.5, 2.5],
+ // CHECK-NEXT: [2.5, 2.5, 2.5]]
+ //
+ call @printMemrefBF16(%6) : (tensor<*xbf16>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[3.5, 3.5, 3.5],
+ // CHECK-NEXT: [3.5, 3.5, 3.5],
+ // CHECK-NEXT: [3.5, 3.5, 3.5]]
+ //
+ call @printMemrefF32(%7) : (tensor<*xf32>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[4.5, 4.5, 4.5],
+ // CHECK-NEXT: [4.5, 4.5, 4.5],
+ // CHECK-NEXT: [4.5, 4.5, 4.5]]
+ //
+ call @printMemrefF64(%8) : (tensor<*xf64>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[(10,5), (10,5), (10,5)],
+ // CHECK-NEXT: [(10,5), (10,5), (10,5)],
+ // CHECK-NEXT: [(10,5), (10,5), (10,5)]]
+ //
+ call @printMemrefC32(%9) : (tensor<*xcomplex<f32>>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[(20,5), (20,5), (20,5)],
+ // CHECK-NEXT: [(20,5), (20,5), (20,5)],
+ // CHECK-NEXT: [(20,5), (20,5), (20,5)]]
+ //
+ call @printMemrefC64(%10) : (tensor<*xcomplex<f64>>) -> ()
+
+ // CHECK-NEXT: data =
+ // CHECK-NEXT: {{\[}}[4, 4, 4],
+ // CHECK-NEXT: [4, 4, 4],
+ // CHECK-NEXT: [4, 4, 4]]
+ //
+ call @printMemrefInd(%11) : (tensor<*xindex>) -> ()
+
+ return
+ }
+}
diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
index 200998a3bf2052..18042f00fdb4e1 100644
--- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
@@ -9132,6 +9132,7 @@ cc_library(
includes = ["include"],
deps = [
":mlir_c_runner_utils",
+ ":mlir_float16_utils",
"//llvm:Support",
],
)
More information about the Mlir-commits
mailing list