52 lines · plain
1// RUN: mlir-opt -allow-unregistered-dialect -p 'builtin.module(buffer-results-to-out-params{hoist-static-allocs})' %s | FileCheck %s2 3// CHECK-LABEL: func private @basic(4// CHECK-SAME: %[[ARG:.*]]: memref<8x64xf32>) {5// CHECK-NOT: memref.alloc()6// CHECK: "test.source"(%[[ARG]]) : (memref<8x64xf32>) -> ()7// CHECK: return8// CHECK: }9func.func private @basic() -> (memref<8x64xf32>) {10 %b = memref.alloc() : memref<8x64xf32>11 "test.source"(%b) : (memref<8x64xf32>) -> ()12 return %b : memref<8x64xf32>13}14 15// CHECK-LABEL: func private @basic_no_change(16// CHECK-SAME: %[[ARG:.*]]: memref<f32>) {17// CHECK: %[[RESULT:.*]] = "test.source"() : () -> memref<f32>18// CHECK: memref.copy %[[RESULT]], %[[ARG]] : memref<f32> to memref<f32>19// CHECK: return20// CHECK: }21func.func private @basic_no_change() -> (memref<f32>) {22 %0 = "test.source"() : () -> (memref<f32>)23 return %0 : memref<f32>24}25 26// CHECK-LABEL: func private @basic_dynamic(27// CHECK-SAME: %[[D:.*]]: index, %[[ARG:.*]]: memref<?xf32>) {28// CHECK: %[[RESULT:.*]] = memref.alloc(%[[D]]) : memref<?xf32>29// CHECK: "test.source"(%[[RESULT]]) : (memref<?xf32>) -> ()30// CHECK: memref.copy %[[RESULT]], %[[ARG]]31// CHECK: return32// CHECK: }33func.func private @basic_dynamic(%d: index) -> (memref<?xf32>) {34 %b = memref.alloc(%d) : memref<?xf32>35 "test.source"(%b) : (memref<?xf32>) -> ()36 return %b : memref<?xf32>37}38 39// -----40 41// no change due to writing to func args42// CHECK-LABEL: func private @return_arg(43// CHECK-SAME: %[[ARG0:.*]]: memref<128x256xf32>, %[[ARG1:.*]]: memref<128x256xf32>, %[[ARG2:.*]]: memref<128x256xf32>) {44// CHECK: "test.source"(%[[ARG0]], %[[ARG1]])45// CHECK: memref.copy46// CHECK: return47// CHECK: }48func.func private @return_arg(%arg0: memref<128x256xf32>, %arg1: memref<128x256xf32>) -> memref<128x256xf32> {49 "test.source"(%arg0, %arg1) : (memref<128x256xf32>, memref<128x256xf32>) -> ()50 return %arg0 : memref<128x256xf32>51}52