1 // RUN: mlir-opt %s -convert-openacc-to-scf -split-input-file | FileCheck %s
3 func.func @testenterdataop(%a: memref<f32>, %ifCond: i1) -> () {
4 %0 = acc.create varPtr(%a : memref<f32>) -> memref<f32>
5 acc.enter_data if(%ifCond) dataOperands(%0 : memref<f32>)
9 // CHECK: func @testenterdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
10 // CHECK: scf.if [[IFCOND]] {
11 // CHECK-NEXT: acc.enter_data dataOperands(%{{.*}} : memref<f32>)
16 func.func @testexitdataop(%a: memref<f32>, %ifCond: i1) -> () {
17 %0 = acc.getdeviceptr varPtr(%a : memref<f32>) -> memref<f32>
18 acc.exit_data if(%ifCond) dataOperands(%0 : memref<f32>)
19 acc.delete accPtr(%0 : memref<f32>)
23 // CHECK: func @testexitdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
24 // CHECK: scf.if [[IFCOND]] {
25 // CHECK-NEXT: acc.exit_data dataOperands(%{{.*}} : memref<f32>)
30 func.func @testupdateop(%a: memref<f32>, %ifCond: i1) -> () {
31 %0 = acc.update_device varPtr(%a : memref<f32>) -> memref<f32>
32 acc.update if(%ifCond) dataOperands(%0 : memref<f32>)
36 // CHECK: func @testupdateop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
37 // CHECK: scf.if [[IFCOND]] {
38 // CHECK: acc.update dataOperands(%{{.*}} : memref<f32>)
43 func.func @update_true(%arg0: memref<f32>) {
44 %true = arith.constant true
45 %0 = acc.update_device varPtr(%arg0 : memref<f32>) -> memref<f32>
46 acc.update if(%true) dataOperands(%0 : memref<f32>)
50 // CHECK-LABEL: func.func @update_true
52 // CHECK: acc.update dataOperands
56 func.func @update_false(%arg0: memref<f32>) {
57 %false = arith.constant false
58 %0 = acc.update_device varPtr(%arg0 : memref<f32>) -> memref<f32>
59 acc.update if(%false) dataOperands(%0 : memref<f32>)
63 // CHECK-LABEL: func.func @update_false
64 // CHECK-NOT: acc.update dataOperands
68 func.func @enter_data_true(%d1 : memref<f32>) {
69 %true = arith.constant true
70 %0 = acc.create varPtr(%d1 : memref<f32>) -> memref<f32>
71 acc.enter_data if(%true) dataOperands(%0 : memref<f32>) attributes {async}
75 // CHECK-LABEL: func.func @enter_data_true
77 // CHECK: acc.enter_data dataOperands
81 func.func @enter_data_false(%d1 : memref<f32>) {
82 %false = arith.constant false
83 %0 = acc.create varPtr(%d1 : memref<f32>) -> memref<f32>
84 acc.enter_data if(%false) dataOperands(%0 : memref<f32>) attributes {async}
88 // CHECK-LABEL: func.func @enter_data_false
89 // CHECK-NOT: acc.enter_data
93 func.func @exit_data_true(%d1 : memref<f32>) {
94 %true = arith.constant true
95 %0 = acc.getdeviceptr varPtr(%d1 : memref<f32>) -> memref<f32>
96 acc.exit_data if(%true) dataOperands(%0 : memref<f32>) attributes {async}
97 acc.delete accPtr(%0 : memref<f32>)
101 // CHECK-LABEL: func.func @exit_data_true
103 // CHECK:acc.exit_data dataOperands
107 func.func @exit_data_false(%d1 : memref<f32>) {
108 %false = arith.constant false
109 %0 = acc.getdeviceptr varPtr(%d1 : memref<f32>) -> memref<f32>
110 acc.exit_data if(%false) dataOperands(%0 : memref<f32>) attributes {async}
111 acc.delete accPtr(%0 : memref<f32>)
115 // CHECK-LABEL: func.func @exit_data_false
116 // CHECK-NOT:acc.exit_data