[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