83 lines · plain
1// RUN: mlir-opt %s --split-input-file --pass-pipeline="builtin.module(test-acc-recipe-populate{recipe-type=private})" | FileCheck %s2 3// CHECK: acc.private.recipe @private_scalar : memref<f32> init {4// CHECK: ^bb0(%{{.*}}: memref<f32>):5// CHECK: %[[ALLOC:.*]] = memref.alloca() {acc.var_name = #acc.var_name<"scalar">} : memref<f32>6// CHECK: acc.yield %[[ALLOC]] : memref<f32>7// CHECK: }8// CHECK-NOT: destroy9 10func.func @test_scalar() {11 %0 = memref.alloca() {test.var = "scalar"} : memref<f32>12 return13}14 15// -----16 17// CHECK: acc.private.recipe @private_static_2d : memref<10x20xf32> init {18// CHECK: ^bb0(%{{.*}}: memref<10x20xf32>):19// CHECK: %[[ALLOC:.*]] = memref.alloca() {acc.var_name = #acc.var_name<"static_2d">} : memref<10x20xf32>20// CHECK: acc.yield %[[ALLOC]] : memref<10x20xf32>21// CHECK: }22// CHECK-NOT: destroy23 24func.func @test_static_2d() {25 %0 = memref.alloca() {test.var = "static_2d"} : memref<10x20xf32>26 return27}28 29// -----30 31// CHECK: acc.private.recipe @private_dynamic_2d : memref<?x?xf32> init {32// CHECK: ^bb0(%[[ARG:.*]]: memref<?x?xf32>):33// CHECK: %[[C0:.*]] = arith.constant 0 : index34// CHECK: %[[DIM0:.*]] = memref.dim %[[ARG]], %[[C0]] : memref<?x?xf32>35// CHECK: %[[C1:.*]] = arith.constant 1 : index36// CHECK: %[[DIM1:.*]] = memref.dim %[[ARG]], %[[C1]] : memref<?x?xf32>37// CHECK: %[[ALLOC:.*]] = memref.alloc(%[[DIM0]], %[[DIM1]]) {acc.var_name = #acc.var_name<"dynamic_2d">} : memref<?x?xf32>38// CHECK: acc.yield %[[ALLOC]] : memref<?x?xf32>39// CHECK: } destroy {40// CHECK: ^bb0(%{{.*}}: memref<?x?xf32>, %[[VAL:.*]]: memref<?x?xf32>):41// CHECK: memref.dealloc %[[VAL]] : memref<?x?xf32>42// CHECK: acc.terminator43// CHECK: }44 45func.func @test_dynamic_2d(%arg0: index, %arg1: index) {46 %0 = memref.alloc(%arg0, %arg1) {test.var = "dynamic_2d"} : memref<?x?xf32>47 return48}49 50// -----51 52// CHECK: acc.private.recipe @private_mixed_dims : memref<10x?xf32> init {53// CHECK: ^bb0(%[[ARG:.*]]: memref<10x?xf32>):54// CHECK: %[[C1:.*]] = arith.constant 1 : index55// CHECK: %[[DIM1:.*]] = memref.dim %[[ARG]], %[[C1]] : memref<10x?xf32>56// CHECK: %[[ALLOC:.*]] = memref.alloc(%[[DIM1]]) {acc.var_name = #acc.var_name<"mixed_dims">} : memref<10x?xf32>57// CHECK: acc.yield %[[ALLOC]] : memref<10x?xf32>58// CHECK: } destroy {59// CHECK: ^bb0(%{{.*}}: memref<10x?xf32>, %[[VAL:.*]]: memref<10x?xf32>):60// CHECK: memref.dealloc %[[VAL]] : memref<10x?xf32>61// CHECK: acc.terminator62// CHECK: }63 64func.func @test_mixed_dims(%arg0: index) {65 %0 = memref.alloc(%arg0) {test.var = "mixed_dims"} : memref<10x?xf32>66 return67}68 69// -----70 71// CHECK: acc.private.recipe @private_scalar_int : memref<i32> init {72// CHECK: ^bb0(%{{.*}}: memref<i32>):73// CHECK: %[[ALLOC:.*]] = memref.alloca() {acc.var_name = #acc.var_name<"scalar_int">} : memref<i32>74// CHECK: acc.yield %[[ALLOC]] : memref<i32>75// CHECK: }76// CHECK-NOT: destroy77 78func.func @test_scalar_int() {79 %0 = memref.alloca() {test.var = "scalar_int"} : memref<i32>80 return81}82 83