|
1 | 1 | // RUN: gc-opt --split-input-file --convert-memref-to-cpuruntime %s -verify-diagnostics | FileCheck %s |
2 | | -func.func @alloc() { |
3 | | - // CHECK-LABEL: func @alloc() |
| 2 | + |
| 3 | +func.func @alloca() { |
| 4 | + // CHECK-LABEL: func @alloca() |
4 | 5 | // CHECK: %[[m0:.*]] = cpuruntime.alloc() : memref<1024xf32> |
5 | | - %m0 = memref.alloc() : memref<1024xf32> |
| 6 | + %m0 = memref.alloca() : memref<1024xf32> |
6 | 7 | scf.forall (%i) in (32) { |
7 | 8 | } |
8 | 9 | // CHECK: cpuruntime.dealloc %[[m0]] : memref<1024xf32> |
9 | | - cpuruntime.dealloc %m0 : memref<1024xf32> |
10 | 10 | return |
11 | 11 | } |
12 | 12 |
|
13 | | -func.func @thread_alloc() { |
14 | | - // CHECK-LABEL: func.func @thread_alloc() |
15 | | - // CHECK: %[[m0:.*]] = cpuruntime.alloc thread_local() : memref<1024xf32> |
| 13 | +func.func @thread_alloca() { |
| 14 | + // CHECK-LABEL: func.func @thread_alloca() |
| 15 | + // CHECK-NEXT: scf.forall {{.*}} { |
| 16 | + // CHECK-NEXT: %[[m0:.*]] = cpuruntime.alloc thread_local() : memref<1024xf32> |
| 17 | + // CHECK-NEXT: cpuruntime.dealloc thread_local %[[m0]] : memref<1024xf32> |
| 18 | + // CHECK-NEXT: } |
16 | 19 | scf.forall (%i) in (32) { |
17 | | - %0 = memref.alloc() : memref<1024xf32> |
18 | | - // CHECK: cpuruntime.dealloc thread_local %[[m0]] : memref<1024xf32> |
19 | | - memref.dealloc %0 : memref<1024xf32> |
| 20 | + %0 = memref.alloca() : memref<1024xf32> |
20 | 21 | } |
21 | 22 | return |
22 | 23 | } |
23 | 24 |
|
24 | | -func.func @return_alloc() -> memref<32x18xf32> { |
25 | | - // CHECK-LABEL: func @return_alloc() -> memref<32x18xf32> |
26 | | - // CHECK: %[[m0:.*]] = memref.alloc() : memref<32x18xf32> |
27 | | - %0 = memref.alloc() : memref<32x18xf32> |
28 | | - return %0 : memref<32x18xf32> |
| 25 | +func.func @dynamic_ranked_alloca(%arg0: memref<*xf32>) { |
| 26 | + // CHECK-LABEL: func @dynamic_ranked_alloca(%arg0: memref<*xf32>) |
| 27 | + // CHECK: %[[RANK:.*]] = memref.rank %{{.*}} : memref<*xf32> |
| 28 | + // CHECK: %[[m0:.*]] = cpuruntime.alloc(%[[RANK]]) : memref<?xindex> |
| 29 | + // CHECK: cpuruntime.dealloc %[[m0]] : memref<?xindex> |
| 30 | + %0 = memref.rank %arg0 : memref<*xf32> |
| 31 | + %alloca = memref.alloca(%0) : memref<?xindex> |
| 32 | + return |
29 | 33 | } |
30 | 34 |
|
31 | | -func.func @yield_alloc() -> memref<32x18xf32> { |
32 | | - // CHECK-LABEL: func @yield_alloc() -> memref<32x18xf32> |
33 | | - // CHECK: %[[m0:.*]] = memref.alloc() : memref<32x18xf32> |
34 | | - %c32 = arith.constant 32 : index |
35 | | - %c1 = arith.constant 1 : index |
36 | | - %c0 = arith.constant 0 : index |
37 | | - %lastBuffer = memref.alloc() : memref<32x18xf32> |
38 | | - scf.for %arg3 = %c0 to %c32 step %c1 iter_args(%arg1 = %lastBuffer) -> (memref<32x18xf32>) { |
39 | | - %newBuffer = memref.alloc() : memref<32x18xf32> |
40 | | - memref.dealloc %arg1 : memref<32x18xf32> |
41 | | - scf.yield %newBuffer : memref<32x18xf32> |
| 35 | +func.func @loop_nested_if_alloca(%arg0: index, %arg1: index, %arg2: index, %arg3: memref<64xf32>) { |
| 36 | + // CHECK-LABEL: func @loop_nested_if_alloca(%arg0: index, %arg1: index, %arg2: index, %arg3: memref<64xf32>) |
| 37 | + // CHECK: %[[m0:.*]] = cpuruntime.alloc() : memref<64xf32> |
| 38 | + %alloca = memref.alloca() : memref<64xf32> |
| 39 | + %0 = scf.for %arg5 = %arg0 to %arg1 step %arg2 iter_args(%arg6 = %arg3) -> (memref<64xf32>) { |
| 40 | + %1 = arith.cmpi eq, %arg5, %arg1 : index |
| 41 | + %2 = scf.if %1 -> (memref<64xf32>) { |
| 42 | + // CHECK: yield %[[m0]] : memref<64xf32> |
| 43 | + scf.yield %alloca : memref<64xf32> |
| 44 | + } else { |
| 45 | + // CHECK: %[[m1:.*]] = memref.alloca() : memref<2xf32> |
| 46 | + %alloca_0 = memref.alloca() : memref<2xf32> |
| 47 | + scf.yield %arg6 : memref<64xf32> |
| 48 | + } |
| 49 | + scf.yield %2 : memref<64xf32> |
42 | 50 | } |
43 | | - return %lastBuffer : memref<32x18xf32> |
| 51 | + // CHECK: cpuruntime.dealloc %[[m0]] : memref<64xf32> |
| 52 | + return |
44 | 53 | } |
45 | 54 |
|
46 | | -func.func @return_view_alloc() -> memref<16xf32> { |
47 | | - // CHECK-LABEL: func @return_view_alloc() -> memref<16xf32> |
48 | | - // CHECK: %[[m0:.*]] = memref.alloc() : memref<128xi8> |
49 | | - %c0 = arith.constant 0: index |
50 | | - %f0 = arith.constant 0.0: f32 |
51 | | - %alloc = memref.alloc() : memref<128xi8> |
52 | | - %view = memref.view %alloc[%c0][] : memref<128xi8> to memref<32xf32> |
53 | | - %subview = memref.subview %view[0][16][1] : memref<32xf32> to memref<16xf32> |
54 | | - return %subview : memref<16xf32> |
| 55 | +func.func @alloca_sequence() { |
| 56 | + // CHECK-LABEL: func @alloca_sequence() |
| 57 | + // CHECK: %[[m0:.*]] = cpuruntime.alloc() : memref<128xf32> |
| 58 | + // CHECK: %[[m1:.*]] = cpuruntime.alloc() : memref<128xf32> |
| 59 | + // CHECK: %[[m2:.*]] = cpuruntime.alloc() : memref<128xf32> |
| 60 | + %alloc = memref.alloca() : memref<128xf32> |
| 61 | + %alloc_0 = memref.alloca() : memref<128xf32> |
| 62 | + %alloc_1 = memref.alloca() : memref<128xf32> |
| 63 | + // CHECK: cpuruntime.dealloc %[[m2]] : memref<128xf32> |
| 64 | + // CHECK: cpuruntime.dealloc %[[m1]] : memref<128xf32> |
| 65 | + // CHECK: cpuruntime.dealloc %[[m0]] : memref<128xf32> |
| 66 | + return |
55 | 67 | } |
56 | 68 |
|
57 | | -func.func @alloc_dealloc_view() { |
58 | | - // CHECK-LABEL: func @alloc_dealloc_view() |
59 | | - // CHECK: %[[m0:.*]] = cpuruntime.alloc() : memref<128xi8> |
60 | | - %c0 = arith.constant 0: index |
61 | | - %f0 = arith.constant 0.0: f32 |
62 | | - %alloc = memref.alloc() : memref<128xi8> |
63 | | - %view = memref.view %alloc[%c0][] : memref<128xi8> to memref<32xf32> |
64 | | - %subview = memref.subview %view[0][16][1] : memref<32xf32> to memref<16xf32> |
65 | | - // CHECK: cpuruntime.dealloc |
66 | | - memref.dealloc %subview : memref<16xf32> |
| 69 | +func.func @nested_alloca() { |
| 70 | + // CHECK-LABEL: func @nested_alloca() |
| 71 | + // CHECK: %[[m0:.*]] = cpuruntime.alloc() : memref<512xf32> |
| 72 | + // CHECK-NEXT: scf.forall {{.*}} { |
| 73 | + // CHECK-NEXT: %[[m1:.*]] = cpuruntime.alloc thread_local() : memref<32xf32> |
| 74 | + // CHECK-NEXT: cpuruntime.dealloc thread_local %[[m1]] : memref<32xf32> |
| 75 | + // CHECK-NEXT: } |
| 76 | + // CHECK-NEXT: scf.forall {{.*}} { |
| 77 | + // CHECK-NEXT: %[[m2:.*]] = cpuruntime.alloc thread_local() : memref<64xf32> |
| 78 | + // CHECK-NEXT: cpuruntime.dealloc thread_local %[[m2]] : memref<64xf32> |
| 79 | + // CHECK-NEXT: } |
| 80 | + // CHECK: cpuruntime.dealloc %[[m0]] : memref<512xf32> |
| 81 | + %0 = memref.alloca() : memref<512xf32> |
| 82 | + scf.forall (%i) in (32) { |
| 83 | + %1 = memref.alloca() : memref<32xf32> |
| 84 | + } |
| 85 | + scf.forall (%i) in (32) { |
| 86 | + %1 = memref.alloca() : memref<64xf32> |
| 87 | + } |
67 | 88 | return |
68 | 89 | } |
0 commit comments