1// RUN: mlir-opt %s | mlir-opt | FileCheck %s
2// RUN: mlir-opt %s --mlir-print-op-generic | mlir-opt | FileCheck %s
3
4// CHECK-LABEL: func @test_clone
5func.func @test_clone(%buf : memref<*xf32>) -> memref<*xf32> {
6  %clone = bufferization.clone %buf : memref<*xf32> to memref<*xf32>
7  return %clone : memref<*xf32>
8}
9
10// CHECK-LABEL: test_to_memref
11func.func @test_to_memref(%arg0: tensor<?xi64>, %arg1: tensor<*xi64>)
12    -> (memref<?xi64, affine_map<(d0) -> (d0 + 7)>>, memref<*xi64, 1>) {
13  %0 = bufferization.to_memref %arg0
14    : memref<?xi64, affine_map<(d0) -> (d0 + 7)>>
15  %1 = bufferization.to_memref %arg1
16    : memref<*xi64, 1>
17  return %0, %1 : memref<?xi64, affine_map<(d0) -> (d0 + 7)>>, memref<*xi64, 1>
18}
19
20// CHECK-LABEL: func @test_to_tensor
21func.func @test_to_tensor(%buf : memref<2xf32>) -> tensor<2xf32> {
22  %tensor = bufferization.to_tensor %buf : memref<2xf32>
23  return %tensor : tensor<2xf32>
24}
25
26// CHECK-LABEL: func @test_alloc_tensor_op
27func.func @test_alloc_tensor_op(%t: tensor<?x5xf32>, %sz: index)
28  -> tensor<?x5xf32>
29{
30  // CHECK: bufferization.alloc_tensor(%{{.*}}) : tensor<?x5xf32>
31  %0 = bufferization.alloc_tensor(%sz) : tensor<?x5xf32>
32  // CHECK: bufferization.alloc_tensor() copy(%{{.*}}) : tensor<?x5xf32>
33  %1 = bufferization.alloc_tensor() copy(%t) : tensor<?x5xf32>
34  // CHECK: bufferization.alloc_tensor() : tensor<5x6xf32>
35  %2 = bufferization.alloc_tensor() : tensor<5x6xf32>
36  // CHECK: bufferization.alloc_tensor(%{{.*}}, %{{.*}}) : tensor<?x?xf32>
37  %3 = bufferization.alloc_tensor(%sz, %sz) : tensor<?x?xf32>
38  // CHECK: bufferization.alloc_tensor() copy(%{{.*}}) {escape = true} : tensor<?x5xf32>
39  %4 = bufferization.alloc_tensor() copy(%t) {escape = true} : tensor<?x5xf32>
40  // CHECK: bufferization.alloc_tensor() copy(%{{.*}}) {escape = false} : tensor<?x5xf32>
41  %5 = bufferization.alloc_tensor() copy(%t) {escape = false} : tensor<?x5xf32>
42  return %1 : tensor<?x5xf32>
43}
44
45// CHECK-LABEL: func @test_dealloc_tensor_op
46func.func @test_dealloc_tensor_op(%arg0: tensor<4xi32>) {
47  // CHECK: bufferization.dealloc_tensor {{.*}} : tensor<4xi32>
48  bufferization.dealloc_tensor %arg0 : tensor<4xi32>
49  return
50}
51