| // RUN: mlir-opt %s -convert-memref-to-llvm -convert-std-to-llvm -reconcile-unrealized-casts | \ |
| // RUN: mlir-cpu-runner -e main -entry-point-result=void \ |
| // RUN: -shared-libs=%mlir_integration_test_dir/libmlir_runner_utils%shlibext | FileCheck %s |
| |
| memref.global "private" constant @__constant_5x3xf32 : memref<5x3xf32> = |
| dense<[[0.0, 1.0, 2.0], |
| [3.0, 4.0, 5.0], |
| [6.0, 7.0, 8.0], |
| [9.0, 10.0, 11.0], |
| [12.0, 13.0, 14.0]]> |
| |
| func @main() { |
| %0 = memref.get_global @__constant_5x3xf32 : memref<5x3xf32> |
| |
| /// Subview with only leading operands. |
| %1 = memref.subview %0[2][3][1]: memref<5x3xf32> to memref<3x3xf32, offset: 6, strides: [3, 1]> |
| %unranked = memref.cast %1 : memref<3x3xf32, offset: 6, strides: [3, 1]> to memref<*xf32> |
| call @print_memref_f32(%unranked) : (memref<*xf32>) -> () |
| |
| // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}} |
| // CHECK-SAME: rank = 2 offset = 6 sizes = [3, 3] strides = [3, 1] data = |
| // CHECK-NEXT: [ |
| // CHECK-SAME: [6, 7, 8], |
| // CHECK-NEXT: [9, 10, 11], |
| // CHECK-NEXT: [12, 13, 14] |
| // CHECK-SAME: ] |
| |
| /// Regular subview. |
| %2 = memref.subview %0[0, 2][5, 1][1, 1]: memref<5x3xf32> to memref<5x1xf32, offset: 2, strides: [3, 1]> |
| %unranked2 = memref.cast %2 : memref<5x1xf32, offset: 2, strides: [3, 1]> to memref<*xf32> |
| call @print_memref_f32(%unranked2) : (memref<*xf32>) -> () |
| |
| // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}} |
| // CHECK-SAME: rank = 2 offset = 2 sizes = [5, 1] strides = [3, 1] data = |
| // CHECK-NEXT: [ |
| // CHECK-SAME: [2], |
| // CHECK-NEXT: [5], |
| // CHECK-NEXT: [8], |
| // CHECK-NEXT: [11], |
| // CHECK-NEXT: [14] |
| // CHECK-SAME: ] |
| |
| /// Rank-reducing subview. |
| %3 = memref.subview %0[0, 2][5, 1][1, 1]: memref<5x3xf32> to memref<5xf32, offset: 2, strides: [3]> |
| %unranked3 = memref.cast %3 : memref<5xf32, offset: 2, strides: [3]> to memref<*xf32> |
| call @print_memref_f32(%unranked3) : (memref<*xf32>) -> () |
| |
| // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}} |
| // CHECK-SAME: rank = 1 offset = 2 sizes = [5] strides = [3] data = |
| // CHECK-NEXT: [2, 5, 8, 11, 14] |
| |
| /// Rank-reducing subview with only leading operands. |
| %4 = memref.subview %0[1][1][1]: memref<5x3xf32> to memref<3xf32, offset: 3, strides: [1]> |
| %unranked4 = memref.cast %4 : memref<3xf32, offset: 3, strides: [1]> to memref<*xf32> |
| call @print_memref_f32(%unranked4) : (memref<*xf32>) -> () |
| // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}} |
| // CHECK-SAME: rank = 1 offset = 3 sizes = [3] strides = [1] data = |
| // CHECK-NEXT: [3, 4, 5] |
| |
| return |
| } |
| |
| func private @print_memref_f32(%ptr : memref<*xf32>) |