[OpenACC] Implement 'device_type' for 'data' construct
[llvm-project.git] / mlir / test / Conversion / OpenACCToSCF / convert-openacc-to-scf.mlir
blobd8e89f64f8bc0409b8171adbb755413a19009f26
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>)
6   return
9 // CHECK:      func @testenterdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
10 // CHECK:        scf.if [[IFCOND]] {
11 // CHECK-NEXT:     acc.enter_data dataOperands(%{{.*}} : memref<f32>)
12 // CHECK-NEXT:   }
14 // -----
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>)
20   return
23 // CHECK:      func @testexitdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
24 // CHECK:        scf.if [[IFCOND]] {
25 // CHECK-NEXT:     acc.exit_data dataOperands(%{{.*}} : memref<f32>)
26 // CHECK-NEXT:   }
28 // -----
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>)
33   return
36 // CHECK:      func @testupdateop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)
37 // CHECK:        scf.if [[IFCOND]] {
38 // CHECK:          acc.update dataOperands(%{{.*}} : memref<f32>)
39 // CHECK-NEXT:   }
41 // -----
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>)
47   return
50 // CHECK-LABEL: func.func @update_true
51 // CHECK-NOT:     if
52 // CHECK:         acc.update dataOperands
54 // -----
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>)
60   return
63 // CHECK-LABEL: func.func @update_false
64 // CHECK-NOT:     acc.update dataOperands
66 // -----
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}
72   return
75 // CHECK-LABEL: func.func @enter_data_true
76 // CHECK-NOT:     if
77 // CHECK:           acc.enter_data dataOperands
79 // -----
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}
85   return
88 // CHECK-LABEL: func.func @enter_data_false
89 // CHECK-NOT:     acc.enter_data
91 // -----
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>)
98   return
101 // CHECK-LABEL: func.func @exit_data_true
102 // CHECK-NOT:if
103 // CHECK:acc.exit_data dataOperands
105 // -----
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>)
112   return
115 // CHECK-LABEL: func.func @exit_data_false
116 // CHECK-NOT:acc.exit_data
118 // -----