103 lines · plain
1// RUN: mlir-opt %s --split-input-file --pass-pipeline="builtin.module(test-acc-recipe-populate{recipe-type=firstprivate})" | FileCheck %s2 3// CHECK: acc.firstprivate.recipe @firstprivate_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: } copy {8// CHECK: ^bb0(%[[SRC:.*]]: memref<f32>, %[[DST:.*]]: memref<f32>):9// CHECK: memref.copy %[[SRC]], %[[DST]] : memref<f32> to memref<f32>10// CHECK: acc.terminator11// CHECK: }12// CHECK-NOT: destroy13 14func.func @test_scalar() {15 %0 = memref.alloca() {test.var = "scalar"} : memref<f32>16 return17}18 19// -----20 21// CHECK: acc.firstprivate.recipe @firstprivate_static_2d : memref<10x20xf32> init {22// CHECK: ^bb0(%{{.*}}: memref<10x20xf32>):23// CHECK: %[[ALLOC:.*]] = memref.alloca() {acc.var_name = #acc.var_name<"static_2d">} : memref<10x20xf32>24// CHECK: acc.yield %[[ALLOC]] : memref<10x20xf32>25// CHECK: } copy {26// CHECK: ^bb0(%[[SRC:.*]]: memref<10x20xf32>, %[[DST:.*]]: memref<10x20xf32>):27// CHECK: memref.copy %[[SRC]], %[[DST]] : memref<10x20xf32> to memref<10x20xf32>28// CHECK: acc.terminator29// CHECK: }30// CHECK-NOT: destroy31 32func.func @test_static_2d() {33 %0 = memref.alloca() {test.var = "static_2d"} : memref<10x20xf32>34 return35}36 37// -----38 39// CHECK: acc.firstprivate.recipe @firstprivate_dynamic_2d : memref<?x?xf32> init {40// CHECK: ^bb0(%[[ARG:.*]]: memref<?x?xf32>):41// CHECK: %[[C0:.*]] = arith.constant 0 : index42// CHECK: %[[DIM0:.*]] = memref.dim %[[ARG]], %[[C0]] : memref<?x?xf32>43// CHECK: %[[C1:.*]] = arith.constant 1 : index44// CHECK: %[[DIM1:.*]] = memref.dim %[[ARG]], %[[C1]] : memref<?x?xf32>45// CHECK: %[[ALLOC:.*]] = memref.alloc(%[[DIM0]], %[[DIM1]]) {acc.var_name = #acc.var_name<"dynamic_2d">} : memref<?x?xf32>46// CHECK: acc.yield %[[ALLOC]] : memref<?x?xf32>47// CHECK: } copy {48// CHECK: ^bb0(%[[SRC:.*]]: memref<?x?xf32>, %[[DST:.*]]: memref<?x?xf32>):49// CHECK: memref.copy %[[SRC]], %[[DST]] : memref<?x?xf32> to memref<?x?xf32>50// CHECK: acc.terminator51// CHECK: } destroy {52// CHECK: ^bb0(%{{.*}}: memref<?x?xf32>, %[[VAL:.*]]: memref<?x?xf32>):53// CHECK: memref.dealloc %[[VAL]] : memref<?x?xf32>54// CHECK: acc.terminator55// CHECK: }56 57func.func @test_dynamic_2d(%arg0: index, %arg1: index) {58 %0 = memref.alloc(%arg0, %arg1) {test.var = "dynamic_2d"} : memref<?x?xf32>59 return60}61 62// -----63 64// CHECK: acc.firstprivate.recipe @firstprivate_mixed_dims : memref<10x?xf32> init {65// CHECK: ^bb0(%[[ARG:.*]]: memref<10x?xf32>):66// CHECK: %[[C1:.*]] = arith.constant 1 : index67// CHECK: %[[DIM1:.*]] = memref.dim %[[ARG]], %[[C1]] : memref<10x?xf32>68// CHECK: %[[ALLOC:.*]] = memref.alloc(%[[DIM1]]) {acc.var_name = #acc.var_name<"mixed_dims">} : memref<10x?xf32>69// CHECK: acc.yield %[[ALLOC]] : memref<10x?xf32>70// CHECK: } copy {71// CHECK: ^bb0(%[[SRC:.*]]: memref<10x?xf32>, %[[DST:.*]]: memref<10x?xf32>):72// CHECK: memref.copy %[[SRC]], %[[DST]] : memref<10x?xf32> to memref<10x?xf32>73// CHECK: acc.terminator74// CHECK: } destroy {75// CHECK: ^bb0(%{{.*}}: memref<10x?xf32>, %[[VAL:.*]]: memref<10x?xf32>):76// CHECK: memref.dealloc %[[VAL]] : memref<10x?xf32>77// CHECK: acc.terminator78// CHECK: }79 80func.func @test_mixed_dims(%arg0: index) {81 %0 = memref.alloc(%arg0) {test.var = "mixed_dims"} : memref<10x?xf32>82 return83}84 85// -----86 87// CHECK: acc.firstprivate.recipe @firstprivate_scalar_int : memref<i32> init {88// CHECK: ^bb0(%{{.*}}: memref<i32>):89// CHECK: %[[ALLOC:.*]] = memref.alloca() {acc.var_name = #acc.var_name<"scalar_int">} : memref<i32>90// CHECK: acc.yield %[[ALLOC]] : memref<i32>91// CHECK: } copy {92// CHECK: ^bb0(%[[SRC:.*]]: memref<i32>, %[[DST:.*]]: memref<i32>):93// CHECK: memref.copy %[[SRC]], %[[DST]] : memref<i32> to memref<i32>94// CHECK: acc.terminator95// CHECK: }96// CHECK-NOT: destroy97 98func.func @test_scalar_int() {99 %0 = memref.alloca() {test.var = "scalar_int"} : memref<i32>100 return101}102 103