brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · e97777c Raw
112 lines · plain
1// RUN: mlir-opt %s -one-shot-bufferize="use-encoding-for-memory-space" -split-input-file | FileCheck %s2 3func.func @alloc_tesor_with_space_no_encoding() -> tensor<128xf32> {4  %0 = bufferization.alloc_tensor() {memory_space = 1 : i64} : tensor<128xf32>5  return %0 : tensor<128xf32>6}7 8// CHECK-LABEL: @alloc_tesor_with_space_no_encoding9//  CHECK-SAME: () -> tensor<128xf32> {10//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 1>11//       CHECK:     %[[v0:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 1> to tensor<128xf32>12//       CHECK:     return %[[v0]] : tensor<128xf32>13 14// -----15 16func.func @alloc_tesor_with_space_and_cast() -> tensor<128xf32, 1> {17  %0 = bufferization.alloc_tensor() {memory_space = 1 : i64} : tensor<128xf32>18  %1 = tensor.cast %0 : tensor<128xf32> to tensor<128xf32, 1>19  return %1 : tensor<128xf32, 1>20}21 22// CHECK-LABEL: @alloc_tesor_with_space_and_cast23//  CHECK-SAME: () -> tensor<128xf32, 1 : i64> {24//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 1>25//       CHECK:     %[[v0:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 1> to tensor<128xf32, 1 : i64>26//       CHECK:     return %[[v0]] : tensor<128xf32, 1 : i64>27 28// -----29 30func.func @alloc_tesor_with_space_with_encoding() -> tensor<128xf32, 1 : i64> {31  %0 = bufferization.alloc_tensor() {memory_space = 1 : i64} : tensor<128xf32, 1 : i64>32  return %0 : tensor<128xf32, 1 : i64>33}34 35// CHECK-LABEL: @alloc_tesor_with_space_with_encoding36//  CHECK-SAME: () -> tensor<128xf32, 1 : i64> {37//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 1>38//       CHECK:     %[[v0:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 1> to tensor<128xf32, 1 : i64>39//       CHECK:     return %[[v0]] : tensor<128xf32, 1 : i64>40 41// -----42 43func.func @alloc_tesor_copy_from_default_space(%arg0: tensor<128xf32>) -> tensor<128xf32> {44  %0 = bufferization.alloc_tensor() copy(%arg0) {memory_space = 1 : i64} : tensor<128xf32>45  return %0 : tensor<128xf32>46}47 48// CHECK-LABEL: @alloc_tesor_copy_from_default_space49//  CHECK-SAME: (%[[arg0:.+]]: tensor<128xf32>) -> tensor<128xf32> {50//       CHECK:     %[[v0:.+]] = bufferization.to_buffer %[[arg0]] : tensor<128xf32> to memref<128xf32, strided<[?], offset: ?>>51//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 1>52//       CHECK:     memref.copy %[[v0]], %[[alloc]] : memref<128xf32, strided<[?], offset: ?>> to memref<128xf32, 1>53//       CHECK:     %[[v1:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 1> to tensor<128xf32>54//       CHECK:     return %[[v1]] : tensor<128xf32>55 56// -----57 58func.func @alloc_tesor_copy_from_non_default_space(%arg0: tensor<128xf32, 1>) -> tensor<128xf32, 2> {59  %0 = bufferization.alloc_tensor() copy(%arg0) {memory_space = 2 : i64} : tensor<128xf32, 1>60  %1 = tensor.cast %0 : tensor<128xf32, 1> to tensor<128xf32, 2>61  return %1 : tensor<128xf32, 2>62}63 64// CHECK-LABEL: @alloc_tesor_copy_from_non_default_space65//  CHECK-SAME: (%[[arg0:.+]]: tensor<128xf32, 1 : i64>) -> tensor<128xf32, 2 : i64> {66//       CHECK:     %[[v0:.+]] = bufferization.to_buffer %[[arg0]] : tensor<128xf32, 1 : i64> to memref<128xf32, strided<[?], offset: ?>, 1>67//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 2>68//       CHECK:     memref.copy %[[v0]], %[[alloc]] : memref<128xf32, strided<[?], offset: ?>, 1> to memref<128xf32, 2>69//       CHECK:     %[[v1:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 2> to tensor<128xf32, 2 : i64>70//       CHECK:     return %[[v1]] : tensor<128xf32, 2 : i64>71 72// -----73 74// TODO: this should be illegal since ultimately we can not eliminate the `bufferization.to_tensor` when we75// bufferize function boundaries.76func.func @alloc_tesor_copy_from_non_default_space_no_cast(%arg0: tensor<128xf32, 1>,77                                                           %arg1: tensor<4xf32, 1>) -> tensor<128xf32, 1> {78  %0 = bufferization.alloc_tensor() copy(%arg0) {memory_space = 2 : i64} : tensor<128xf32, 1>79  %1 = tensor.insert_slice %arg1 into %arg0 [0][4][1] : tensor<4xf32, 1> into tensor<128xf32, 1>80  return %0 : tensor<128xf32, 1>81}82 83// CHECK-LABEL: @alloc_tesor_copy_from_non_default_space_no_cast84//  CHECK-SAME: (%[[arg0:.+]]: tensor<128xf32, 1 : i64>, %[[arg1:.+]]: tensor<4xf32, 1 : i64>) -> tensor<128xf32, 1 : i64> {85//       CHECK:     %[[v0:.+]] = bufferization.to_buffer %[[arg1]] : tensor<4xf32, 1 : i64> to memref<4xf32, strided<[?], offset: ?>, 1>86//       CHECK:     %[[v1:.+]] = bufferization.to_buffer %[[arg0]] : tensor<128xf32, 1 : i64> to memref<128xf32, strided<[?], offset: ?>, 1>87//       CHECK:     %[[v2:.+]] = bufferization.to_buffer %[[arg0]] : tensor<128xf32, 1 : i64> to memref<128xf32, strided<[?], offset: ?>, 1>88//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 2>89//       CHECK:     memref.copy %[[v2]], %[[alloc]] : memref<128xf32, strided<[?], offset: ?>, 1> to memref<128xf32, 2>90//       CHECK:     %[[v3:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 2> to tensor<128xf32, 1 : i64>91//       CHECK:     %[[alloc_0:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 1>92//       CHECK:     memref.copy %[[v1]], %[[alloc_0]] : memref<128xf32, strided<[?], offset: ?>, 1> to memref<128xf32, 1>93//       CHECK:     %[[subview:.+]] = memref.subview %[[alloc_0]][0] [4] [1] : memref<128xf32, 1> to memref<4xf32, strided<[1]>, 1>94//       CHECK:     memref.copy %[[v0]], %[[subview]] : memref<4xf32, strided<[?], offset: ?>, 1> to memref<4xf32, strided<[1]>, 1>95//       CHECK:     return %[[v3]] : tensor<128xf32, 1 : i64>96 97// -----98 99func.func @materialize_in_destination(%arg0: tensor<128xf32, 1>) -> tensor<128xf32, 2> {100  %0 = bufferization.alloc_tensor () {memory_space = 2 : i64} : tensor<128xf32, 2>101  %1 = bufferization.materialize_in_destination %arg0 in %0 : (tensor<128xf32, 1>, tensor<128xf32, 2>) -> tensor<128xf32, 2>102  return %1 : tensor<128xf32, 2>103}104 105// CHECK-LABEL: @materialize_in_destination106//  CHECK-SAME: (%[[arg0:.+]]: tensor<128xf32, 1 : i64>) -> tensor<128xf32, 2 : i64> {107//       CHECK:     %[[v0:.+]] = bufferization.to_buffer %[[arg0]] : tensor<128xf32, 1 : i64> to memref<128xf32, strided<[?], offset: ?>, 1>108//       CHECK:     %[[alloc:.+]] = memref.alloc() {alignment = 64 : i64} : memref<128xf32, 2>109//       CHECK:     memref.copy %[[v0]], %[[alloc]] : memref<128xf32, strided<[?], offset: ?>, 1> to memref<128xf32, 2>110//       CHECK:     %[[v1:.+]] = bufferization.to_tensor %[[alloc]] : memref<128xf32, 2> to tensor<128xf32, 2 : i64>111//       CHECK:     return %[[v1]] : tensor<128xf32, 2 : i64>112