brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 21d5f42 Raw
99 lines · plain
1// RUN: mlir-opt -verify-diagnostics -convert-bufferization-to-memref -split-input-file %s | FileCheck %s2 3// CHECK-LABEL: @conversion_static4func.func @conversion_static(%arg0 : memref<2xf32>) -> memref<2xf32> {5  %0 = bufferization.clone %arg0 : memref<2xf32> to memref<2xf32>6  memref.dealloc %arg0 : memref<2xf32>7  return %0 : memref<2xf32>8}9 10// CHECK:      %[[ALLOC:.*]] = memref.alloc11// CHECK-NEXT: memref.copy %[[ARG:.*]], %[[ALLOC]]12// CHECK-NEXT: memref.dealloc %[[ARG]]13// CHECK-NEXT: return %[[ALLOC]]14 15// -----16 17// CHECK-LABEL: @conversion_dynamic18func.func @conversion_dynamic(%arg0 : memref<?xf32>) -> memref<?xf32> {19  %1 = bufferization.clone %arg0 : memref<?xf32> to memref<?xf32>20  memref.dealloc %arg0 : memref<?xf32>21  return %1 : memref<?xf32>22}23 24// CHECK:      %[[CONST:.*]] = arith.constant25// CHECK:      %[[DIM:.*]] = memref.dim %[[ARG:.*]], %[[CONST]]26// CHECK-NEXT: %[[ALLOC:.*]] = memref.alloc(%[[DIM]])27// CHECK-NEXT: memref.copy %[[ARG]], %[[ALLOC]]28// CHECK-NEXT: memref.dealloc %[[ARG]]29// CHECK-NEXT: return %[[ALLOC]]30 31// -----32 33// CHECK-LABEL: @conversion_unknown34func.func @conversion_unknown(%arg0 : memref<*xf32>) -> memref<*xf32> {35  %1 = bufferization.clone %arg0 : memref<*xf32> to memref<*xf32>36  memref.dealloc %arg0 : memref<*xf32>37  return %1 : memref<*xf32>38}39 40// CHECK:      %[[RANK:.*]] = memref.rank %[[ARG:.*]]41// CHECK-NEXT: %[[ALLOCA:.*]] = memref.alloca(%[[RANK]])42// CHECK-NEXT: %[[FOR:.*]] = scf.for43// CHECK-NEXT: %[[DIM:.*]] = memref.dim %[[ARG:.*]] %[[ARG:.*]]44// CHECK-NEXT: memref.store %[[DIM:.*]], %[[ALLOCA:.*]][%[[ARG:.*]]]45// CHECK-NEXT: %[[MUL:.*]] = arith.muli %[[ARG:.*]], %[[DIM:.*]]46// CHECK-NEXT: scf.yield %[[MUL:.*]]47// CHECK:      %[[ALLOC:.*]] = memref.alloc(%[[FOR:.*]])48// CHECK-NEXT: %[[RESHAPE:.*]] = memref.reshape %[[ALLOC:.*]]49// CHECK-NEXT: memref.copy50// CHECK-NEXT: memref.dealloc51// CHECK-NEXT: return %[[RESHAPE:.*]]52 53// -----54 55// CHECK-LABEL: func @conversion_with_layout_map(56//  CHECK-SAME:     %[[ARG:.*]]: memref<?xf32, strided<[?], offset: ?>>57//       CHECK:   %[[C0:.*]] = arith.constant 0 : index58//       CHECK:   %[[DIM:.*]] = memref.dim %[[ARG]], %[[C0]]59//       CHECK:   %[[ALLOC:.*]] = memref.alloc(%[[DIM]]) : memref<?xf32>60//       CHECK:   %[[CASTED:.*]] = memref.cast %[[ALLOC]] : memref<?xf32> to memref<?xf32, strided<[?], offset: ?>>61//       CHECK:   memref.copy62//       CHECK:   memref.dealloc63//       CHECK:   return %[[CASTED]]64func.func @conversion_with_layout_map(%arg0 : memref<?xf32, strided<[?], offset: ?>>) -> memref<?xf32, strided<[?], offset: ?>> {65  %1 = bufferization.clone %arg0 : memref<?xf32, strided<[?], offset: ?>> to memref<?xf32, strided<[?], offset: ?>>66  memref.dealloc %arg0 : memref<?xf32, strided<[?], offset: ?>>67  return %1 : memref<?xf32, strided<[?], offset: ?>>68}69 70// -----71 72// This bufferization.clone cannot be lowered because a buffer with this layout73// map cannot be allocated (or casted to).74 75func.func @conversion_with_invalid_layout_map(%arg0 : memref<?xf32, strided<[10], offset: ?>>)76    -> memref<?xf32, strided<[10], offset: ?>> {77// expected-error@+1 {{failed to legalize operation 'bufferization.clone' that was explicitly marked illegal}}78  %1 = bufferization.clone %arg0 : memref<?xf32, strided<[10], offset: ?>> to memref<?xf32, strided<[10], offset: ?>>79  memref.dealloc %arg0 : memref<?xf32, strided<[10], offset: ?>>80  return %1 : memref<?xf32, strided<[10], offset: ?>>81}82 83// -----84// Test: check that the dealloc lowering pattern is registered.85 86// CHECK-NOT: func @deallocHelper87// CHECK-LABEL: func @conversion_dealloc_simple88// CHECK-SAME: [[ARG0:%.+]]: memref<2xf32>89// CHECK-SAME: [[ARG1:%.+]]: i190func.func @conversion_dealloc_simple(%arg0: memref<2xf32>, %arg1: i1) {91  bufferization.dealloc (%arg0 : memref<2xf32>) if (%arg1)92  return93}94 95//      CHECK: scf.if [[ARG1]] {96// CHECK-NEXT:   memref.dealloc [[ARG0]] : memref<2xf32>97// CHECK-NEXT: }98// CHECK-NEXT: return99