64 lines · plain
1// RUN: mlir-opt %s -expand-strided-metadata -lower-affine -convert-arith-to-llvm -finalize-memref-to-llvm -convert-func-to-llvm -reconcile-unrealized-casts | \2// RUN: mlir-runner -e main -entry-point-result=void \3// RUN: -shared-libs=%mlir_runner_utils | FileCheck %s4 5memref.global "private" constant @__constant_5x3xf32 : memref<5x3xf32> =6dense<[[0.0, 1.0, 2.0],7 [3.0, 4.0, 5.0],8 [6.0, 7.0, 8.0],9 [9.0, 10.0, 11.0],10 [12.0, 13.0, 14.0]]>11 12func.func @main() {13 %0 = memref.get_global @__constant_5x3xf32 : memref<5x3xf32>14 15 /// Subview with only leading operands.16 %1 = memref.subview %0[2, 0][3, 3][1, 1]: memref<5x3xf32> to memref<3x3xf32, strided<[3, 1], offset: 6>>17 %unranked = memref.cast %1 : memref<3x3xf32, strided<[3, 1], offset: 6>> to memref<*xf32>18 call @printMemrefF32(%unranked) : (memref<*xf32>) -> ()19 20 // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}}21 // CHECK-SAME: rank = 2 offset = 6 sizes = [3, 3] strides = [3, 1] data =22 // CHECK-NEXT: [23 // CHECK-SAME: [6, 7, 8],24 // CHECK-NEXT: [9, 10, 11],25 // CHECK-NEXT: [12, 13, 14]26 // CHECK-SAME: ]27 28 /// Regular subview.29 %2 = memref.subview %0[0, 2][5, 1][1, 1]: memref<5x3xf32> to memref<5x1xf32, strided<[3, 1], offset: 2>>30 %unranked2 = memref.cast %2 : memref<5x1xf32, strided<[3, 1], offset: 2>> to memref<*xf32>31 call @printMemrefF32(%unranked2) : (memref<*xf32>) -> ()32 33 // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}}34 // CHECK-SAME: rank = 2 offset = 2 sizes = [5, 1] strides = [3, 1] data =35 // CHECK-NEXT: [36 // CHECK-SAME: [2],37 // CHECK-NEXT: [5],38 // CHECK-NEXT: [8],39 // CHECK-NEXT: [11],40 // CHECK-NEXT: [14]41 // CHECK-SAME: ]42 43 /// Rank-reducing subview.44 %3 = memref.subview %0[0, 2][5, 1][1, 1]: memref<5x3xf32> to memref<5xf32, strided<[3], offset: 2>>45 %unranked3 = memref.cast %3 : memref<5xf32, strided<[3], offset: 2>> to memref<*xf32>46 call @printMemrefF32(%unranked3) : (memref<*xf32>) -> ()47 48 // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}}49 // CHECK-SAME: rank = 1 offset = 2 sizes = [5] strides = [3] data =50 // CHECK-NEXT: [2, 5, 8, 11, 14]51 52 /// Rank-reducing subview with only leading operands.53 %4 = memref.subview %0[1, 0][1, 3][1, 1]: memref<5x3xf32> to memref<3xf32, strided<[1], offset: 3>>54 %unranked4 = memref.cast %4 : memref<3xf32, strided<[1], offset: 3>> to memref<*xf32>55 call @printMemrefF32(%unranked4) : (memref<*xf32>) -> ()56 // CHECK: Unranked Memref base@ = {{0x[-9a-f]*}}57 // CHECK-SAME: rank = 1 offset = 3 sizes = [3] strides = [1] data =58 // CHECK-NEXT: [3, 4, 5]59 60 return61}62 63func.func private @printMemrefF32(%ptr : memref<*xf32>)64