// RUN: mlir-opt -allow-unregistered-dialect -p 'builtin.module(buffer-results-to-out-params{hoist-static-allocs})' %s | FileCheck %s // CHECK-LABEL: func private @basic( // CHECK-SAME: %[[ARG:.*]]: memref<8x64xf32>) { // CHECK-NOT: memref.alloc() // CHECK: "test.source"(%[[ARG]]) : (memref<8x64xf32>) -> () // CHECK: return // CHECK: } func.func private @basic() -> (memref<8x64xf32>) { %b = memref.alloc() : memref<8x64xf32> "test.source"(%b) : (memref<8x64xf32>) -> () return %b : memref<8x64xf32> } // CHECK-LABEL: func private @basic_no_change( // CHECK-SAME: %[[ARG:.*]]: memref) { // CHECK: %[[RESULT:.*]] = "test.source"() : () -> memref // CHECK: memref.copy %[[RESULT]], %[[ARG]] : memref to memref // CHECK: return // CHECK: } func.func private @basic_no_change() -> (memref) { %0 = "test.source"() : () -> (memref) return %0 : memref } // CHECK-LABEL: func private @basic_dynamic( // CHECK-SAME: %[[D:.*]]: index, %[[ARG:.*]]: memref) { // CHECK: %[[RESULT:.*]] = memref.alloc(%[[D]]) : memref // CHECK: "test.source"(%[[RESULT]]) : (memref) -> () // CHECK: memref.copy %[[RESULT]], %[[ARG]] // CHECK: return // CHECK: } func.func private @basic_dynamic(%d: index) -> (memref) { %b = memref.alloc(%d) : memref "test.source"(%b) : (memref) -> () return %b : memref } // ----- // no change due to writing to func args // CHECK-LABEL: func private @return_arg( // CHECK-SAME: %[[ARG0:.*]]: memref<128x256xf32>, %[[ARG1:.*]]: memref<128x256xf32>, %[[ARG2:.*]]: memref<128x256xf32>) { // CHECK: "test.source"(%[[ARG0]], %[[ARG1]]) // CHECK: memref.copy // CHECK: return // CHECK: } func.func private @return_arg(%arg0: memref<128x256xf32>, %arg1: memref<128x256xf32>) -> memref<128x256xf32> { "test.source"(%arg0, %arg1) : (memref<128x256xf32>, memref<128x256xf32>) -> () return %arg0 : memref<128x256xf32> }