|
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