xref: /llvm-project/flang/test/Lower/OpenMP/target.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
1deafb36fSKrzysztof Parzyszek! The "thread_limit" clause was added to the "target" construct in OpenMP 5.1.
2deafb36fSKrzysztof Parzyszek! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=51 %s -o - | FileCheck %s
3c360ce0cSKiran Chandramohan
4c360ce0cSKiran Chandramohan!===============================================================================
5c360ce0cSKiran Chandramohan! Target_Enter Simple
6c360ce0cSKiran Chandramohan!===============================================================================
7c360ce0cSKiran Chandramohan
8c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_enter_simple() {
9c360ce0cSKiran Chandramohansubroutine omp_target_enter_simple
10c360ce0cSKiran Chandramohan   integer :: a(1024)
11d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
12d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
13c360ce0cSKiran Chandramohan   !CHECK: omp.target_enter_data   map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
14c360ce0cSKiran Chandramohan   !$omp target enter data map(to: a)
15c360ce0cSKiran Chandramohan    return
16c360ce0cSKiran Chandramohanend subroutine omp_target_enter_simple
17c360ce0cSKiran Chandramohan
18c360ce0cSKiran Chandramohan!===============================================================================
1958f45d90SPranav Bhandarkar! Target_Enter `depend` clause
2058f45d90SPranav Bhandarkar!===============================================================================
2158f45d90SPranav Bhandarkar
2258f45d90SPranav Bhandarkar!CHECK-LABEL: func.func @_QPomp_target_enter_depend() {
2358f45d90SPranav Bhandarkarsubroutine omp_target_enter_depend
2458f45d90SPranav Bhandarkar   !CHECK: %[[A:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFomp_target_enter_dependEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
2558f45d90SPranav Bhandarkar   integer :: a(1024)
2658f45d90SPranav Bhandarkar
278f9dbb0aSTom Eccles   !CHECK: omp.task depend(taskdependout -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) private({{.*}}) {
2858f45d90SPranav Bhandarkar   !$omp task depend(out: a)
2958f45d90SPranav Bhandarkar   call foo(a)
3058f45d90SPranav Bhandarkar   !$omp end task
31d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
32d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
3303d9a317SSergio Afonso   !CHECK: omp.target_enter_data depend(taskdependin -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
3458f45d90SPranav Bhandarkar   !$omp target enter data map(to: a) depend(in: a)
3558f45d90SPranav Bhandarkar    return
3658f45d90SPranav Bhandarkarend subroutine omp_target_enter_depend
3758f45d90SPranav Bhandarkar
3858f45d90SPranav Bhandarkar!===============================================================================
39c360ce0cSKiran Chandramohan! Target_Enter Map types
40c360ce0cSKiran Chandramohan!===============================================================================
41c360ce0cSKiran Chandramohan
42c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_enter_mt() {
43c360ce0cSKiran Chandramohansubroutine omp_target_enter_mt
44c360ce0cSKiran Chandramohan   integer :: a(1024)
45c360ce0cSKiran Chandramohan   integer :: b(1024)
46c360ce0cSKiran Chandramohan   integer :: c(1024)
47c360ce0cSKiran Chandramohan   integer :: d(1024)
48d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_0:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
49d84252e0SSergio Afonso   !CHECK: %[[MAP_0:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS_0]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
50d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_1:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
51d84252e0SSergio Afonso   !CHECK: %[[MAP_1:.*]] = omp.map.info var_ptr(%{{.*}})  map_clauses(to) capture(ByRef) bounds(%[[BOUNDS_1]]) -> !fir.ref<!fir.array<1024xi32>> {name = "b"}
52d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_2:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
53d84252e0SSergio Afonso   !CHECK: %[[MAP_2:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(always, exit_release_or_enter_alloc) capture(ByRef) bounds(%[[BOUNDS_2]]) -> !fir.ref<!fir.array<1024xi32>> {name = "c"}
54d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_3:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
55d84252e0SSergio Afonso   !CHECK: %[[MAP_3:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS_3]]) -> !fir.ref<!fir.array<1024xi32>> {name = "d"}
56c360ce0cSKiran Chandramohan   !CHECK: omp.target_enter_data   map_entries(%[[MAP_0]], %[[MAP_1]], %[[MAP_2]], %[[MAP_3]] : !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
57c360ce0cSKiran Chandramohan   !$omp target enter data map(to: a, b) map(always, alloc: c) map(to: d)
58c360ce0cSKiran Chandramohanend subroutine omp_target_enter_mt
59c360ce0cSKiran Chandramohan
60c360ce0cSKiran Chandramohan!===============================================================================
61c360ce0cSKiran Chandramohan! `Nowait` clause
62c360ce0cSKiran Chandramohan!===============================================================================
63c360ce0cSKiran Chandramohan
64c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_enter_nowait() {
65c360ce0cSKiran Chandramohansubroutine omp_target_enter_nowait
66c360ce0cSKiran Chandramohan   integer :: a(1024)
67d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
68d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
69a3800a60SSergio Afonso   !CHECK: omp.target_enter_data map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>) nowait
70c360ce0cSKiran Chandramohan   !$omp target enter data map(to: a) nowait
71c360ce0cSKiran Chandramohanend subroutine omp_target_enter_nowait
72c360ce0cSKiran Chandramohan
73c360ce0cSKiran Chandramohan!===============================================================================
74c360ce0cSKiran Chandramohan! `if` clause
75c360ce0cSKiran Chandramohan!===============================================================================
76c360ce0cSKiran Chandramohan
77c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_enter_if() {
78c360ce0cSKiran Chandramohansubroutine omp_target_enter_if
79c360ce0cSKiran Chandramohan   integer :: a(1024)
80c360ce0cSKiran Chandramohan   integer :: i
81c360ce0cSKiran Chandramohan   i = 5
82c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_3:.*]] = fir.load %[[VAL_1:.*]] : !fir.ref<i32>
83c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_4:.*]] = arith.constant 10 : i32
84c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_5:.*]] = arith.cmpi slt, %[[VAL_3]], %[[VAL_4]] : i32
85d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
86d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
8703d9a317SSergio Afonso   !CHECK: omp.target_enter_data   if(%[[VAL_5]]) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
88c360ce0cSKiran Chandramohan   !$omp target enter data if(i<10) map(to: a)
89c360ce0cSKiran Chandramohanend subroutine omp_target_enter_if
90c360ce0cSKiran Chandramohan
91c360ce0cSKiran Chandramohan!===============================================================================
92c360ce0cSKiran Chandramohan! `device` clause
93c360ce0cSKiran Chandramohan!===============================================================================
94c360ce0cSKiran Chandramohan
95c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_enter_device() {
96c360ce0cSKiran Chandramohansubroutine omp_target_enter_device
97c360ce0cSKiran Chandramohan   integer :: a(1024)
98c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_1:.*]] = arith.constant 2 : i32
99d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
100d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
101c360ce0cSKiran Chandramohan   !CHECK: omp.target_enter_data   device(%[[VAL_1]] : i32) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
102c360ce0cSKiran Chandramohan   !$omp target enter data map(to: a) device(2)
103c360ce0cSKiran Chandramohanend subroutine omp_target_enter_device
104c360ce0cSKiran Chandramohan
105c360ce0cSKiran Chandramohan!===============================================================================
106c360ce0cSKiran Chandramohan! Target_Exit Simple
107c360ce0cSKiran Chandramohan!===============================================================================
108c360ce0cSKiran Chandramohan
109c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_exit_simple() {
110c360ce0cSKiran Chandramohansubroutine omp_target_exit_simple
111c360ce0cSKiran Chandramohan   integer :: a(1024)
112d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
113d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
114c360ce0cSKiran Chandramohan   !CHECK: omp.target_exit_data   map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
115c360ce0cSKiran Chandramohan   !$omp target exit data map(from: a)
116c360ce0cSKiran Chandramohanend subroutine omp_target_exit_simple
117c360ce0cSKiran Chandramohan
118c360ce0cSKiran Chandramohan!===============================================================================
119c360ce0cSKiran Chandramohan! Target_Exit Map types
120c360ce0cSKiran Chandramohan!===============================================================================
121c360ce0cSKiran Chandramohan
122c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_exit_mt() {
123c360ce0cSKiran Chandramohansubroutine omp_target_exit_mt
124c360ce0cSKiran Chandramohan   integer :: a(1024)
125c360ce0cSKiran Chandramohan   integer :: b(1024)
126c360ce0cSKiran Chandramohan   integer :: c(1024)
127c360ce0cSKiran Chandramohan   integer :: d(1024)
128c360ce0cSKiran Chandramohan   integer :: e(1024)
129d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_0:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
130d84252e0SSergio Afonso   !CHECK: %[[MAP_0:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS_0]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
131d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_1:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
132d84252e0SSergio Afonso   !CHECK: %[[MAP_1:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS_1]]) -> !fir.ref<!fir.array<1024xi32>> {name = "b"}
133d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_2:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
134d84252e0SSergio Afonso   !CHECK: %[[MAP_2:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(exit_release_or_enter_alloc) capture(ByRef) bounds(%[[BOUNDS_2]]) -> !fir.ref<!fir.array<1024xi32>> {name = "c"}
135d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_3:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
136d84252e0SSergio Afonso   !CHECK: %[[MAP_3:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(always, delete) capture(ByRef) bounds(%[[BOUNDS_3]]) -> !fir.ref<!fir.array<1024xi32>> {name = "d"}
137d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_4:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
138d84252e0SSergio Afonso   !CHECK: %[[MAP_4:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS_4]]) -> !fir.ref<!fir.array<1024xi32>> {name = "e"}
139c360ce0cSKiran Chandramohan   !CHECK: omp.target_exit_data map_entries(%[[MAP_0]], %[[MAP_1]], %[[MAP_2]], %[[MAP_3]], %[[MAP_4]] : !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
140c360ce0cSKiran Chandramohan   !$omp target exit data map(from: a,b) map(release: c) map(always, delete: d) map(from: e)
141c360ce0cSKiran Chandramohanend subroutine omp_target_exit_mt
142c360ce0cSKiran Chandramohan
143c360ce0cSKiran Chandramohan!===============================================================================
144c360ce0cSKiran Chandramohan! `device` clause
145c360ce0cSKiran Chandramohan!===============================================================================
146c360ce0cSKiran Chandramohan
147c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_exit_device() {
148c360ce0cSKiran Chandramohansubroutine omp_target_exit_device
149c360ce0cSKiran Chandramohan   integer :: a(1024)
150c360ce0cSKiran Chandramohan   integer :: d
151c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_1:.*]] : !fir.ref<i32>
152d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
153d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
154c360ce0cSKiran Chandramohan   !CHECK: omp.target_exit_data   device(%[[VAL_2]] : i32) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
155c360ce0cSKiran Chandramohan   !$omp target exit data map(from: a) device(d)
156c360ce0cSKiran Chandramohanend subroutine omp_target_exit_device
157c360ce0cSKiran Chandramohan
158c360ce0cSKiran Chandramohan!===============================================================================
15958f45d90SPranav Bhandarkar! Target_Exit `depend` clause
16058f45d90SPranav Bhandarkar!===============================================================================
16158f45d90SPranav Bhandarkar
16258f45d90SPranav Bhandarkar!CHECK-LABEL: func.func @_QPomp_target_exit_depend() {
16358f45d90SPranav Bhandarkarsubroutine omp_target_exit_depend
16458f45d90SPranav Bhandarkar   !CHECK: %[[A:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFomp_target_exit_dependEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
16558f45d90SPranav Bhandarkar   integer :: a(1024)
1668f9dbb0aSTom Eccles   !CHECK: omp.task depend(taskdependout -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) private({{.*}}) {
16758f45d90SPranav Bhandarkar   !$omp task depend(out: a)
16858f45d90SPranav Bhandarkar   call foo(a)
16958f45d90SPranav Bhandarkar   !$omp end task
170d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
171d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(from) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
17203d9a317SSergio Afonso   !CHECK: omp.target_exit_data depend(taskdependout -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
17358f45d90SPranav Bhandarkar   !$omp target exit data map(from: a) depend(out: a)
17458f45d90SPranav Bhandarkarend subroutine omp_target_exit_depend
17558f45d90SPranav Bhandarkar
17658f45d90SPranav Bhandarkar
17758f45d90SPranav Bhandarkar!===============================================================================
17858f45d90SPranav Bhandarkar! Target_Update `depend` clause
17958f45d90SPranav Bhandarkar!===============================================================================
18058f45d90SPranav Bhandarkar
18158f45d90SPranav Bhandarkar!CHECK-LABEL: func.func @_QPomp_target_update_depend() {
18258f45d90SPranav Bhandarkarsubroutine omp_target_update_depend
18358f45d90SPranav Bhandarkar   !CHECK: %[[A:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFomp_target_update_dependEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
18458f45d90SPranav Bhandarkar   integer :: a(1024)
18558f45d90SPranav Bhandarkar
1868f9dbb0aSTom Eccles   !CHECK: omp.task depend(taskdependout -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) private({{.*}}) {
18758f45d90SPranav Bhandarkar   !$omp task depend(out: a)
18858f45d90SPranav Bhandarkar   call foo(a)
18958f45d90SPranav Bhandarkar   !$omp end task
19058f45d90SPranav Bhandarkar
191d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds
192f4cf93fbSagozillon   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr(%[[A]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>) map_clauses(to) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
19303d9a317SSergio Afonso   !CHECK: omp.target_update depend(taskdependin -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>)
19458f45d90SPranav Bhandarkar   !$omp target update to(a) depend(in:a)
19558f45d90SPranav Bhandarkarend subroutine omp_target_update_depend
19658f45d90SPranav Bhandarkar
19758f45d90SPranav Bhandarkar!===============================================================================
19852b7045fSKareem Ergawy! Target_Update `to` clause
19952b7045fSKareem Ergawy!===============================================================================
20052b7045fSKareem Ergawy
20152b7045fSKareem Ergawy!CHECK-LABEL: func.func @_QPomp_target_update_to() {
20252b7045fSKareem Ergawysubroutine omp_target_update_to
20352b7045fSKareem Ergawy   integer :: a(1024)
20452b7045fSKareem Ergawy
20552b7045fSKareem Ergawy   !CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}})
206d84252e0SSergio Afonso   !CHECK-DAG: %[[BOUNDS:.*]] = omp.map.bounds
20752b7045fSKareem Ergawy
208f4cf93fbSagozillon   !CHECK: %[[TO_MAP:.*]] = omp.map.info var_ptr(%[[A_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)
20952b7045fSKareem Ergawy   !CHECK-SAME: map_clauses(to) capture(ByRef)
21052b7045fSKareem Ergawy   !CHECK-SAME: bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
21152b7045fSKareem Ergawy
21203d9a317SSergio Afonso   !CHECK: omp.target_update map_entries(%[[TO_MAP]] : !fir.ref<!fir.array<1024xi32>>)
21352b7045fSKareem Ergawy   !$omp target update to(a)
21452b7045fSKareem Ergawyend subroutine omp_target_update_to
21552b7045fSKareem Ergawy
21652b7045fSKareem Ergawy!===============================================================================
21752b7045fSKareem Ergawy! Target_Update `from` clause
21852b7045fSKareem Ergawy!===============================================================================
21952b7045fSKareem Ergawy
22052b7045fSKareem Ergawy!CHECK-LABEL: func.func @_QPomp_target_update_from() {
22152b7045fSKareem Ergawysubroutine omp_target_update_from
22252b7045fSKareem Ergawy   integer :: a(1024)
22352b7045fSKareem Ergawy
22452b7045fSKareem Ergawy   !CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}})
225d84252e0SSergio Afonso   !CHECK-DAG: %[[BOUNDS:.*]] = omp.map.bounds
22652b7045fSKareem Ergawy
227f4cf93fbSagozillon   !CHECK: %[[FROM_MAP:.*]] = omp.map.info var_ptr(%[[A_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)
22852b7045fSKareem Ergawy   !CHECK-SAME: map_clauses(from) capture(ByRef)
22952b7045fSKareem Ergawy   !CHECK-SAME: bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
23052b7045fSKareem Ergawy
23103d9a317SSergio Afonso   !CHECK: omp.target_update map_entries(%[[FROM_MAP]] : !fir.ref<!fir.array<1024xi32>>)
23252b7045fSKareem Ergawy   !$omp target update from(a)
23352b7045fSKareem Ergawyend subroutine omp_target_update_from
23452b7045fSKareem Ergawy
23552b7045fSKareem Ergawy!===============================================================================
23652b7045fSKareem Ergawy! Target_Update `if` clause
23752b7045fSKareem Ergawy!===============================================================================
23852b7045fSKareem Ergawy
23952b7045fSKareem Ergawy!CHECK-LABEL: func.func @_QPomp_target_update_if() {
24052b7045fSKareem Ergawysubroutine omp_target_update_if
24152b7045fSKareem Ergawy   integer :: a(1024)
24252b7045fSKareem Ergawy   logical :: i
24352b7045fSKareem Ergawy
24452b7045fSKareem Ergawy   !CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}})
245d84252e0SSergio Afonso   !CHECK-DAG: %[[BOUNDS:.*]] = omp.map.bounds
24652b7045fSKareem Ergawy   !CHECK-DAG: %[[COND:.*]] = fir.convert %{{.*}} : (!fir.logical<4>) -> i1
24752b7045fSKareem Ergawy
24803d9a317SSergio Afonso   !CHECK: omp.target_update if(%[[COND]]) map_entries
24952b7045fSKareem Ergawy   !$omp target update from(a) if(i)
25052b7045fSKareem Ergawyend subroutine omp_target_update_if
25152b7045fSKareem Ergawy
25252b7045fSKareem Ergawy!===============================================================================
25352b7045fSKareem Ergawy! Target_Update `device` clause
25452b7045fSKareem Ergawy!===============================================================================
25552b7045fSKareem Ergawy
25652b7045fSKareem Ergawy!CHECK-LABEL: func.func @_QPomp_target_update_device() {
25752b7045fSKareem Ergawysubroutine omp_target_update_device
25852b7045fSKareem Ergawy   integer :: a(1024)
25952b7045fSKareem Ergawy   logical :: i
26052b7045fSKareem Ergawy
26152b7045fSKareem Ergawy   !CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}})
262d84252e0SSergio Afonso   !CHECK-DAG: %[[BOUNDS:.*]] = omp.map.bounds
26352b7045fSKareem Ergawy   !CHECK-DAG: %[[DEVICE:.*]] = arith.constant 1 : i32
26452b7045fSKareem Ergawy
26503d9a317SSergio Afonso   !CHECK: omp.target_update device(%[[DEVICE]] : i32) map_entries
26652b7045fSKareem Ergawy   !$omp target update from(a) device(1)
26752b7045fSKareem Ergawyend subroutine omp_target_update_device
26852b7045fSKareem Ergawy
26952b7045fSKareem Ergawy!===============================================================================
27052b7045fSKareem Ergawy! Target_Update `nowait` clause
27152b7045fSKareem Ergawy!===============================================================================
27252b7045fSKareem Ergawy
27352b7045fSKareem Ergawy!CHECK-LABEL: func.func @_QPomp_target_update_nowait() {
27452b7045fSKareem Ergawysubroutine omp_target_update_nowait
27552b7045fSKareem Ergawy   integer :: a(1024)
27652b7045fSKareem Ergawy   logical :: i
27752b7045fSKareem Ergawy
27852b7045fSKareem Ergawy   !CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}})
279d84252e0SSergio Afonso   !CHECK-DAG: %[[BOUNDS:.*]] = omp.map.bounds
28052b7045fSKareem Ergawy
281a3800a60SSergio Afonso   !CHECK: omp.target_update map_entries({{.*}}) nowait
28252b7045fSKareem Ergawy   !$omp target update from(a) nowait
28352b7045fSKareem Ergawyend subroutine omp_target_update_nowait
28452b7045fSKareem Ergawy
28552b7045fSKareem Ergawy!===============================================================================
286c360ce0cSKiran Chandramohan! Target_Data with region
287c360ce0cSKiran Chandramohan!===============================================================================
288c360ce0cSKiran Chandramohan
289c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_data() {
290c360ce0cSKiran Chandramohansubroutine omp_target_data
291c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_0:.*]] = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFomp_target_dataEa"}
292c360ce0cSKiran Chandramohan   !CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[VAL_0]](%{{.*}}) {uniq_name = "_QFomp_target_dataEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
293c360ce0cSKiran Chandramohan   integer :: a(1024)
294d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
295f4cf93fbSagozillon   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr(%[[A_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)   map_clauses(tofrom) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
296c360ce0cSKiran Chandramohan   !CHECK: omp.target_data   map_entries(%[[MAP]] : !fir.ref<!fir.array<1024xi32>>) {
297c360ce0cSKiran Chandramohan   !$omp target data map(tofrom: a)
298c360ce0cSKiran Chandramohan      !CHECK: %[[C10:.*]] = arith.constant 10 : i32
299c360ce0cSKiran Chandramohan      !CHECK: %[[C1:.*]] = arith.constant 1 : index
300c360ce0cSKiran Chandramohan      !CHECK: %[[A_1:.*]] = hlfir.designate %[[A_DECL]]#0 (%[[C1]])  : (!fir.ref<!fir.array<1024xi32>>, index) -> !fir.ref<i32>
301c360ce0cSKiran Chandramohan      !CHECK: hlfir.assign %[[C10]] to %[[A_1]] : i32, !fir.ref<i32
302c360ce0cSKiran Chandramohan      a(1) = 10
303c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
304c360ce0cSKiran Chandramohan   !$omp end target data
305c360ce0cSKiran Chandramohan   !CHECK: }
306c360ce0cSKiran Chandramohanend subroutine omp_target_data
307c360ce0cSKiran Chandramohan
308c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_data_mt
309c360ce0cSKiran Chandramohansubroutine omp_target_data_mt
310c360ce0cSKiran Chandramohan   integer :: a(1024)
311c360ce0cSKiran Chandramohan   integer :: b(1024)
312c360ce0cSKiran Chandramohan   !CHECK: %[[VAR_A:.*]] = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFomp_target_data_mtEa"}
313c360ce0cSKiran Chandramohan   !CHECK: %[[VAR_A_DECL:.*]]:2 = hlfir.declare %[[VAR_A]](%{{.*}}) {uniq_name = "_QFomp_target_data_mtEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
314c360ce0cSKiran Chandramohan   !CHECK: %[[VAR_B:.*]] = fir.alloca !fir.array<1024xi32> {bindc_name = "b", uniq_name = "_QFomp_target_data_mtEb"}
315c360ce0cSKiran Chandramohan   !CHECK: %[[VAR_B_DECL:.*]]:2 = hlfir.declare %[[VAR_B]](%{{.*}}) {uniq_name = "_QFomp_target_data_mtEb"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
316d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_A:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
317f4cf93fbSagozillon   !CHECK: %[[MAP_A:.*]] = omp.map.info var_ptr(%[[VAR_A_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)   map_clauses(tofrom) capture(ByRef) bounds(%[[BOUNDS_A]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
318c360ce0cSKiran Chandramohan   !CHECK: omp.target_data   map_entries(%[[MAP_A]] : !fir.ref<!fir.array<1024xi32>>) {
319c360ce0cSKiran Chandramohan   !$omp target data map(a)
320c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
321c360ce0cSKiran Chandramohan   !$omp end target data
322c360ce0cSKiran Chandramohan   !CHECK: }
323d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_B:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
324f4cf93fbSagozillon   !CHECK: %[[MAP_B:.*]] = omp.map.info var_ptr(%[[VAR_B_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)   map_clauses(always, from) capture(ByRef) bounds(%[[BOUNDS_B]]) -> !fir.ref<!fir.array<1024xi32>> {name = "b"}
325c360ce0cSKiran Chandramohan   !CHECK: omp.target_data   map_entries(%[[MAP_B]] : !fir.ref<!fir.array<1024xi32>>) {
326c360ce0cSKiran Chandramohan   !$omp target data map(always, from : b)
327c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
328c360ce0cSKiran Chandramohan   !$omp end target data
329c360ce0cSKiran Chandramohan   !CHECK: }
330c360ce0cSKiran Chandramohanend subroutine omp_target_data_mt
331c360ce0cSKiran Chandramohan
332c360ce0cSKiran Chandramohan!===============================================================================
333c360ce0cSKiran Chandramohan! Target with region
334c360ce0cSKiran Chandramohan!===============================================================================
335c360ce0cSKiran Chandramohan
336c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target() {
337c360ce0cSKiran Chandramohansubroutine omp_target
338fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFomp_targetEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
339c360ce0cSKiran Chandramohan   integer :: a(1024)
340d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound({{.*}}) upper_bound({{.*}}) extent({{.*}}) stride({{.*}}) start_idx({{.*}})
341f4cf93fbSagozillon   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr(%[[VAL_1]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>) map_clauses(tofrom) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
342f1d77386SAkash Banerjee   !CHECK: omp.target   map_entries(%[[MAP]] -> %[[ARG_0:.*]] : !fir.ref<!fir.array<1024xi32>>) {
343c360ce0cSKiran Chandramohan   !$omp target map(tofrom: a)
344f1d77386SAkash Banerjee      !CHECK: %[[VAL_7:.*]] = arith.constant 1024 : index
345f1d77386SAkash Banerjee      !CHECK: %[[VAL_2:.*]] = fir.shape %[[VAL_7]] : (index) -> !fir.shape<1>
346fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[ARG_0]](%[[VAL_2]]) {uniq_name = "_QFomp_targetEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
347fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_4:.*]] = arith.constant 10 : i32
348fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_5:.*]] = arith.constant 1 : index
349fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_6:.*]] = hlfir.designate %[[VAL_3]]#0 (%[[VAL_5]])  : (!fir.ref<!fir.array<1024xi32>>, index) -> !fir.ref<i32>
350fbaf2c6cSAkash Banerjee      !CHECK: hlfir.assign %[[VAL_4]] to %[[VAL_6]] : i32, !fir.ref<i32>
351c360ce0cSKiran Chandramohan      a(1) = 10
352c360ce0cSKiran Chandramohan      !CHECK: omp.terminator
353c360ce0cSKiran Chandramohan   !$omp end target
354c360ce0cSKiran Chandramohan   !CHECK: }
355c360ce0cSKiran Chandramohanend subroutine omp_target
356c360ce0cSKiran Chandramohan
357c360ce0cSKiran Chandramohan!===============================================================================
35858f45d90SPranav Bhandarkar! Target with region `depend` clause
35958f45d90SPranav Bhandarkar!===============================================================================
36058f45d90SPranav Bhandarkar
36158f45d90SPranav Bhandarkar!CHECK-LABEL: func.func @_QPomp_target_depend() {
36258f45d90SPranav Bhandarkarsubroutine omp_target_depend
36358f45d90SPranav Bhandarkar   !CHECK: %[[EXTENT_A:.*]] = arith.constant 1024 : index
36458f45d90SPranav Bhandarkar   !CHECK: %[[A:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFomp_target_dependEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
36558f45d90SPranav Bhandarkar   integer :: a(1024)
3668f9dbb0aSTom Eccles   !CHECK: omp.task depend(taskdependout -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) private({{.*}}) {
36758f45d90SPranav Bhandarkar   !$omp task depend(out: a)
36858f45d90SPranav Bhandarkar   call foo(a)
36958f45d90SPranav Bhandarkar   !$omp end task
37058f45d90SPranav Bhandarkar   !CHECK: %[[STRIDE_A:.*]] = arith.constant 1 : index
37158f45d90SPranav Bhandarkar   !CHECK: %[[LBOUND_A:.*]] = arith.constant 0 : index
37258f45d90SPranav Bhandarkar   !CHECK: %[[UBOUND_A:.*]] = arith.subi %c1024, %c1 : index
373d84252e0SSergio Afonso   !CHECK: %[[BOUNDS_A:.*]] = omp.map.bounds lower_bound(%[[LBOUND_A]] : index) upper_bound(%[[UBOUND_A]] : index) extent(%[[EXTENT_A]] : index) stride(%[[STRIDE_A]] : index) start_idx(%[[STRIDE_A]] : index)
374f4cf93fbSagozillon   !CHECK: %[[MAP_A:.*]] = omp.map.info var_ptr(%[[A]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>) map_clauses(tofrom) capture(ByRef) bounds(%[[BOUNDS_A]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
37503d9a317SSergio Afonso   !CHECK: omp.target depend(taskdependin -> %[[A]]#1 : !fir.ref<!fir.array<1024xi32>>) map_entries(%[[MAP_A]] -> %[[BB0_ARG:.*]] : !fir.ref<!fir.array<1024xi32>>) {
37658f45d90SPranav Bhandarkar   !$omp target map(tofrom: a) depend(in: a)
37758f45d90SPranav Bhandarkar      a(1) = 10
37858f45d90SPranav Bhandarkar      !CHECK: omp.terminator
37958f45d90SPranav Bhandarkar   !$omp end target
38058f45d90SPranav Bhandarkar   !CHECK: }
38158f45d90SPranav Bhandarkar end subroutine omp_target_depend
38258f45d90SPranav Bhandarkar
38358f45d90SPranav Bhandarkar!===============================================================================
384fbaf2c6cSAkash Banerjee! Target implicit capture
385fbaf2c6cSAkash Banerjee!===============================================================================
386fbaf2c6cSAkash Banerjee
387fbaf2c6cSAkash Banerjee!CHECK-LABEL: func.func @_QPomp_target_implicit() {
388fbaf2c6cSAkash Banerjeesubroutine omp_target_implicit
389fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_0:.*]] = arith.constant 1024 : index
390fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFomp_target_implicitEa"}
391fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_2:.*]] = fir.shape %[[VAL_0]] : (index) -> !fir.shape<1>
392fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_1]](%[[VAL_2]]) {uniq_name = "_QFomp_target_implicitEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
393fbaf2c6cSAkash Banerjee   integer :: a(1024)
394d84252e0SSergio Afonso   !CHECK: %[[VAL_4:.*]] = omp.map.info var_ptr(%[[VAL_3]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)   map_clauses(implicit, tofrom) capture(ByRef) bounds(%{{.*}}) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
395f1d77386SAkash Banerjee   !CHECK: omp.target   map_entries(%[[VAL_4]] -> %[[VAL_6:.*]] : !fir.ref<!fir.array<1024xi32>>) {
396fbaf2c6cSAkash Banerjee   !$omp target
397f1d77386SAkash Banerjee      !CHECK: %[[VAL_7:.*]] = arith.constant 1024 : index
398fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_8:.*]] = fir.shape %[[VAL_7]] : (index) -> !fir.shape<1>
399fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_6]](%[[VAL_8]]) {uniq_name = "_QFomp_target_implicitEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
400fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_10:.*]] = arith.constant 10 : i32
401fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_11:.*]] = arith.constant 1 : index
402fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_12:.*]] = hlfir.designate %[[VAL_9]]#0 (%[[VAL_11]])  : (!fir.ref<!fir.array<1024xi32>>, index) -> !fir.ref<i32>
403fbaf2c6cSAkash Banerjee      !CHECK: hlfir.assign %[[VAL_10]] to %[[VAL_12]] : i32, !fir.ref<i32>
404fbaf2c6cSAkash Banerjee      a(1) = 10
405fbaf2c6cSAkash Banerjee      !CHECK: omp.terminator
406fbaf2c6cSAkash Banerjee   !$omp end target
407fbaf2c6cSAkash Banerjee   !CHECK: }
408fbaf2c6cSAkash Banerjeeend subroutine omp_target_implicit
409fbaf2c6cSAkash Banerjee
410fbaf2c6cSAkash Banerjee!===============================================================================
411fbaf2c6cSAkash Banerjee! Target implicit capture nested
412fbaf2c6cSAkash Banerjee!===============================================================================
413fbaf2c6cSAkash Banerjee
414fbaf2c6cSAkash Banerjee!CHECK-LABEL: func.func @_QPomp_target_implicit_nested() {
415fbaf2c6cSAkash Banerjeesubroutine omp_target_implicit_nested
416fbaf2c6cSAkash Banerjee   integer::a, b
417fbaf2c6cSAkash Banerjee   !CHECK: omp.target   map_entries(%{{.*}} -> %[[ARG0:.*]], %{{.*}} -> %[[ARG1:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
418fbaf2c6cSAkash Banerjee   !$omp target
419fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_8:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFomp_target_implicit_nestedEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
420fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_9:.*]]:2 = hlfir.declare %[[ARG1]] {uniq_name = "_QFomp_target_implicit_nestedEb"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
421fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_10:.*]] = arith.constant 10 : i32
422fbaf2c6cSAkash Banerjee      !CHECK: hlfir.assign %[[VAL_10]] to %[[VAL_8]]#0 : i32, !fir.ref<i32>
423fbaf2c6cSAkash Banerjee      a = 10
424fbaf2c6cSAkash Banerjee      !CHECK: omp.parallel
425fbaf2c6cSAkash Banerjee      !$omp parallel
426fbaf2c6cSAkash Banerjee         !CHECK: %[[VAL_11:.*]] = arith.constant 20 : i32
427fbaf2c6cSAkash Banerjee         !CHECK: hlfir.assign %[[VAL_11]] to %[[VAL_9]]#0 : i32, !fir.ref<i32>
428fbaf2c6cSAkash Banerjee         b = 20
429fbaf2c6cSAkash Banerjee         !CHECK: omp.terminator
430fbaf2c6cSAkash Banerjee      !$omp end parallel
431fbaf2c6cSAkash Banerjee      !CHECK: omp.terminator
432fbaf2c6cSAkash Banerjee   !$omp end target
433fbaf2c6cSAkash Banerjee   !CHECK: }
434fbaf2c6cSAkash Banerjeeend subroutine omp_target_implicit_nested
435fbaf2c6cSAkash Banerjee
436fbaf2c6cSAkash Banerjee!===============================================================================
437fbaf2c6cSAkash Banerjee! Target implicit capture with bounds
438fbaf2c6cSAkash Banerjee!===============================================================================
439fbaf2c6cSAkash Banerjee
440f1d77386SAkash Banerjee!CHECK-LABEL: func.func @_QPomp_target_implicit_bounds(
441f1d77386SAkash Banerjee!CHECK: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) {
442fbaf2c6cSAkash Banerjeesubroutine omp_target_implicit_bounds(n)
443f1d77386SAkash Banerjee   !CHECK: %[[VAL_COPY:.*]] = fir.alloca i32
4441710c8cfSSlava Zakharin   !CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFomp_target_implicit_boundsEn"} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>)
445f1d77386SAkash Banerjee   !CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_1]]#0 : !fir.ref<i32>
446f1d77386SAkash Banerjee   !CHECK: fir.store %[[VAL_2]] to %[[VAL_COPY]] : !fir.ref<i32>
447f1d77386SAkash Banerjee   !CHECK: %[[VAL_3:.*]] = fir.convert %[[VAL_2]] : (i32) -> i64
448f1d77386SAkash Banerjee   !CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_3]] : (i64) -> index
449f1d77386SAkash Banerjee   !CHECK: %[[VAL_5:.*]] = arith.constant 0 : index
450f1d77386SAkash Banerjee   !CHECK: %[[VAL_6:.*]] = arith.cmpi sgt, %[[VAL_4]], %[[VAL_5]] : index
451f1d77386SAkash Banerjee   !CHECK: %[[VAL_7:.*]] = arith.select %[[VAL_6]], %[[VAL_4]], %[[VAL_5]] : index
452f1d77386SAkash Banerjee   !CHECK: %[[VAL_8:.*]] = fir.alloca !fir.array<?xi32>, %[[VAL_7]] {bindc_name = "a", uniq_name = "_QFomp_target_implicit_boundsEa"}
453f1d77386SAkash Banerjee   !CHECK: %[[VAL_9:.*]] = fir.shape %[[VAL_7]] : (index) -> !fir.shape<1>
454f1d77386SAkash Banerjee   !CHECK: %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_8]](%[[VAL_9]]) {uniq_name = "_QFomp_target_implicit_boundsEa"} : (!fir.ref<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.ref<!fir.array<?xi32>>)
455f4cf93fbSagozillon   !CHECK: %[[UB:.*]] = arith.subi %[[VAL_7]], %c1{{.*}} : index
456fe408eb5SValentin Clement (バレンタイン クレメン)
457fbaf2c6cSAkash Banerjee   integer :: n
458f1d77386SAkash Banerjee   integer :: a(n)
459f4cf93fbSagozillon   !CHECK: %[[VAL_14:.*]] = omp.map.bounds lower_bound(%c0{{.*}} : index) upper_bound(%[[UB]] : index) extent(%[[VAL_7]] : index) stride(%c1{{.*}} : index) start_idx(%c1{{.*}} : index)
46014243368SAkash Banerjee   !CHECK: %[[VAL_15:.*]] = omp.map.info var_ptr(%[[VAL_10]]#1 : !fir.ref<!fir.array<?xi32>>, i32) map_clauses(implicit, tofrom) capture(ByRef) bounds(%[[VAL_14]]) -> !fir.ref<!fir.array<?xi32>> {name = "a"}
461d84252e0SSergio Afonso   !CHECK: %[[VAL_16:.*]] = omp.map.info var_ptr(%[[VAL_COPY]] : !fir.ref<i32>, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !fir.ref<i32> {name = ""}
462f1d77386SAkash Banerjee   !CHECK: omp.target map_entries(%[[VAL_15]] -> %[[VAL_17:.*]], %[[VAL_16]] -> %[[VAL_18:.*]] : !fir.ref<!fir.array<?xi32>>, !fir.ref<i32>) {
463fbaf2c6cSAkash Banerjee   !$omp target
464f1d77386SAkash Banerjee      !CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_18]] : !fir.ref<i32>
465f1d77386SAkash Banerjee      !CHECK: %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i32) -> i64
466f1d77386SAkash Banerjee      !CHECK: %[[VAL_21:.*]] = arith.constant 0 : index
467f1d77386SAkash Banerjee      !CHECK: %[[VAL_22:.*]] = fir.convert %[[VAL_20]] : (i64) -> index
468f1d77386SAkash Banerjee      !CHECK: %[[VAL_23:.*]] = arith.cmpi sgt, %[[VAL_22]], %[[VAL_21]] : index
469f1d77386SAkash Banerjee      !CHECK: %[[VAL_24:.*]] = arith.select %[[VAL_23]], %[[VAL_22]], %[[VAL_21]] : index
470f1d77386SAkash Banerjee      !CHECK: %[[VAL_25:.*]] = fir.shape %[[VAL_24]] : (index) -> !fir.shape<1>
471f1d77386SAkash Banerjee      !CHECK: %[[VAL_26:.*]]:2 = hlfir.declare %[[VAL_17]](%[[VAL_25]]) {uniq_name = "_QFomp_target_implicit_boundsEa"} : (!fir.ref<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.ref<!fir.array<?xi32>>)
472f1d77386SAkash Banerjee      !CHECK: %[[VAL_27:.*]] = arith.constant 22 : i32
473f1d77386SAkash Banerjee      !CHECK: %[[VAL_28:.*]] = arith.constant 11 : index
474f1d77386SAkash Banerjee      !CHECK: %[[VAL_29:.*]] = hlfir.designate %[[VAL_26]]#0 (%[[VAL_28]])  : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>
475f1d77386SAkash Banerjee      !CHECK: hlfir.assign %[[VAL_27]] to %[[VAL_29]] : i32, !fir.ref<i32>
476f1d77386SAkash Banerjee      a(11) = 22
477fbaf2c6cSAkash Banerjee      !CHECK: omp.terminator
478fbaf2c6cSAkash Banerjee   !$omp end target
479fbaf2c6cSAkash Banerjee!CHECK: }
480fbaf2c6cSAkash Banerjeeend subroutine omp_target_implicit_bounds
481fbaf2c6cSAkash Banerjee
482fbaf2c6cSAkash Banerjee!===============================================================================
483c360ce0cSKiran Chandramohan! Target `thread_limit` clause
484c360ce0cSKiran Chandramohan!===============================================================================
485c360ce0cSKiran Chandramohan
486c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_thread_limit() {
487c360ce0cSKiran Chandramohansubroutine omp_target_thread_limit
488c360ce0cSKiran Chandramohan   integer :: a
489d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(tofrom) capture(ByRef) -> !fir.ref<i32> {name = "a"}
4904dd5180aSSergio Afonso   !CHECK: %[[VAL_1:.*]] = arith.constant 64 : i32
491cdb3ebf1SSergio Afonso   !CHECK: omp.target thread_limit(%[[VAL_1]] : i32) map_entries(%[[MAP]] -> %{{.*}} : !fir.ref<i32>) {
492c360ce0cSKiran Chandramohan   !$omp target map(tofrom: a) thread_limit(64)
493c360ce0cSKiran Chandramohan      a = 10
494c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
495c360ce0cSKiran Chandramohan   !$omp end target
496c360ce0cSKiran Chandramohan   !CHECK: }
497c360ce0cSKiran Chandramohanend subroutine omp_target_thread_limit
498c360ce0cSKiran Chandramohan
499c360ce0cSKiran Chandramohan!===============================================================================
500c360ce0cSKiran Chandramohan! Target `use_device_ptr` clause
501c360ce0cSKiran Chandramohan!===============================================================================
502c360ce0cSKiran Chandramohan
503c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_device_ptr() {
504c360ce0cSKiran Chandramohansubroutine omp_target_device_ptr
505c360ce0cSKiran Chandramohan   use iso_c_binding, only : c_ptr, c_loc
506c360ce0cSKiran Chandramohan   type(c_ptr) :: a
507c360ce0cSKiran Chandramohan   integer, target :: b
508d84252e0SSergio Afonso   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}})   map_clauses(tofrom) capture(ByRef) -> {{.*}} {name = "a"}
5095894d4e8SSergio Afonso   !CHECK: omp.target_data map_entries(%[[MAP]]{{.*}}) use_device_ptr({{.*}} -> %[[VAL_1:.*]] : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>)
510c360ce0cSKiran Chandramohan   !$omp target data map(tofrom: a) use_device_ptr(a)
511c360ce0cSKiran Chandramohan   !CHECK: {{.*}} = fir.coordinate_of %[[VAL_1:.*]], {{.*}} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.field) -> !fir.ref<i64>
512c360ce0cSKiran Chandramohan      a = c_loc(b)
513c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
514c360ce0cSKiran Chandramohan   !$omp end target data
515c360ce0cSKiran Chandramohan   !CHECK: }
516c360ce0cSKiran Chandramohanend subroutine omp_target_device_ptr
517c360ce0cSKiran Chandramohan
518c360ce0cSKiran Chandramohan !===============================================================================
519c360ce0cSKiran Chandramohan ! Target `use_device_addr` clause
520c360ce0cSKiran Chandramohan !===============================================================================
521c360ce0cSKiran Chandramohan
522c360ce0cSKiran Chandramohan !CHECK-LABEL: func.func @_QPomp_target_device_addr() {
523c360ce0cSKiran Chandramohansubroutine omp_target_device_addr
524c360ce0cSKiran Chandramohan   integer, pointer :: a
525c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "a", uniq_name = "_QFomp_target_device_addrEa"}
526c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_0_DECL:.*]]:2 = hlfir.declare %0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFomp_target_device_addrEa"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
527d84252e0SSergio Afonso   !CHECK: %[[MAP_MEMBERS:.*]] = omp.map.info var_ptr({{.*}} : !fir.ref<!fir.box<!fir.ptr<i32>>>, i32) var_ptr_ptr({{.*}} : !fir.llvm_ptr<!fir.ref<i32>>) map_clauses(tofrom) capture(ByRef) -> !fir.llvm_ptr<!fir.ref<i32>> {name = ""}
528e508baccSagozillon   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr({{.*}} : !fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.box<!fir.ptr<i32>>) map_clauses(to) capture(ByRef) members(%[[MAP_MEMBERS]] : [0] : !fir.llvm_ptr<!fir.ref<i32>>) -> !fir.ref<!fir.box<!fir.ptr<i32>>> {name = "a"}
5299ba41031SAkash Banerjee   !CHECK: %[[DEV_ADDR_MEMBERS:.*]] = omp.map.info var_ptr({{.*}} : !fir.ref<!fir.box<!fir.ptr<i32>>>, i32) var_ptr_ptr({{.*}} : !fir.llvm_ptr<!fir.ref<i32>>) map_clauses(tofrom) capture(ByRef) -> !fir.llvm_ptr<!fir.ref<i32>> {name = ""}
530e508baccSagozillon   !CHECK: %[[DEV_ADDR:.*]] = omp.map.info var_ptr({{.*}} : !fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.box<!fir.ptr<i32>>) map_clauses(to) capture(ByRef) members(%[[DEV_ADDR_MEMBERS]] : [0] : !fir.llvm_ptr<!fir.ref<i32>>) -> !fir.ref<!fir.box<!fir.ptr<i32>>> {name = "a"}
531d84d0cafSagozillon   !CHECK: omp.target_data map_entries(%[[MAP]], %[[MAP_MEMBERS]] : {{.*}}) use_device_addr(%[[DEV_ADDR]] -> %[[ARG_0:.*]], %[[DEV_ADDR_MEMBERS]] -> %[[ARG_1:.*]] : !fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.llvm_ptr<!fir.ref<i32>>) {
532c360ce0cSKiran Chandramohan   !$omp target data map(tofrom: a) use_device_addr(a)
533d84d0cafSagozillon   !CHECK: %[[VAL_1_DECL:.*]]:2 = hlfir.declare %[[ARG_0]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFomp_target_device_addrEa"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
534c360ce0cSKiran Chandramohan   !CHECK: %[[C10:.*]] = arith.constant 10 : i32
535c360ce0cSKiran Chandramohan   !CHECK: %[[A_BOX:.*]] = fir.load %[[VAL_1_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
536c360ce0cSKiran Chandramohan   !CHECK: %[[A_ADDR:.*]] = fir.box_addr %[[A_BOX]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
537c360ce0cSKiran Chandramohan   !CHECK: hlfir.assign %[[C10]] to %[[A_ADDR]] : i32, !fir.ptr<i32>
538c360ce0cSKiran Chandramohan   a = 10
539c360ce0cSKiran Chandramohan   !CHECK: omp.terminator
540c360ce0cSKiran Chandramohan   !$omp end target data
541c360ce0cSKiran Chandramohan   !CHECK: }
542c360ce0cSKiran Chandramohanend subroutine omp_target_device_addr
543c360ce0cSKiran Chandramohan
544eac11c59SKiran Chandramohan
545eac11c59SKiran Chandramohan!===============================================================================
546eac11c59SKiran Chandramohan! Target Data with unstructured code
547eac11c59SKiran Chandramohan!===============================================================================
548eac11c59SKiran Chandramohan!CHECK-LABEL: func.func @_QPsb
549eac11c59SKiran Chandramohansubroutine sb
550eac11c59SKiran Chandramohan   integer :: i = 1
551eac11c59SKiran Chandramohan   integer :: j = 11
552eac11c59SKiran Chandramohan!CHECK: omp.target_data map_entries(%{{.*}}, %{{.*}} : !fir.ref<i32>, !fir.ref<i32>)
553eac11c59SKiran Chandramohan   !$omp target data map(tofrom: i, j)
554eac11c59SKiran Chandramohan     j = j - 1
555eac11c59SKiran Chandramohan!CHECK: %[[J_VAL:.*]] = arith.subi
556eac11c59SKiran Chandramohan!CHECK: hlfir.assign %[[J_VAL]]
557eac11c59SKiran Chandramohan!CHECK: cf.br ^[[BB:.*]]
558eac11c59SKiran Chandramohan!CHECK: ^[[BB]]:
559eac11c59SKiran Chandramohan     goto 20
560eac11c59SKiran Chandramohan20   i = i + 1
561eac11c59SKiran Chandramohan!CHECK: %[[I_VAL:.*]] = arith.addi
562eac11c59SKiran Chandramohan!CHECK: hlfir.assign %[[I_VAL]]
563eac11c59SKiran Chandramohan!CHECK: omp.terminator
564eac11c59SKiran Chandramohan   !$omp end target data
565eac11c59SKiran Chandramohanend subroutine
566eac11c59SKiran Chandramohan
567c360ce0cSKiran Chandramohan!===============================================================================
568c360ce0cSKiran Chandramohan! Target with parallel loop
569c360ce0cSKiran Chandramohan!===============================================================================
570c360ce0cSKiran Chandramohan
571c360ce0cSKiran Chandramohan!CHECK-LABEL: func.func @_QPomp_target_parallel_do() {
572c360ce0cSKiran Chandramohansubroutine omp_target_parallel_do
573c360ce0cSKiran Chandramohan   !CHECK: %[[C1024:.*]] = arith.constant 1024 : index
574c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_0:.*]] = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFomp_target_parallel_doEa"}
575c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_0_DECL:.*]]:2 = hlfir.declare %[[VAL_0]](%{{.*}}) {uniq_name = "_QFomp_target_parallel_doEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
576c360ce0cSKiran Chandramohan   integer :: a(1024)
577c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_1:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFomp_target_parallel_doEi"}
578c360ce0cSKiran Chandramohan   !CHECK: %[[VAL_1_DECL:.*]]:2 = hlfir.declare %[[VAL_1]] {uniq_name = "_QFomp_target_parallel_doEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
579c360ce0cSKiran Chandramohan   integer :: i
580c360ce0cSKiran Chandramohan   !CHECK: %[[C1:.*]] = arith.constant 1 : index
581c360ce0cSKiran Chandramohan   !CHECK: %[[C0:.*]] = arith.constant 0 : index
582c360ce0cSKiran Chandramohan   !CHECK: %[[SUB:.*]] = arith.subi %[[C1024]], %[[C1]] : index
583d84252e0SSergio Afonso   !CHECK: %[[BOUNDS:.*]] = omp.map.bounds   lower_bound(%[[C0]] : index) upper_bound(%[[SUB]] : index) extent(%[[C1024]] : index) stride(%[[C1]] : index) start_idx(%[[C1]] : index)
584f4cf93fbSagozillon   !CHECK: %[[MAP:.*]] = omp.map.info var_ptr(%[[VAL_0_DECL]]#1 : !fir.ref<!fir.array<1024xi32>>, !fir.array<1024xi32>)   map_clauses(tofrom) capture(ByRef) bounds(%[[BOUNDS]]) -> !fir.ref<!fir.array<1024xi32>> {name = "a"}
585f1d77386SAkash Banerjee   !CHECK: omp.target   map_entries(%[[MAP]] -> %[[ARG_0:.*]], %{{.*}} -> %{{.*}} : !fir.ref<!fir.array<1024xi32>>, !fir.ref<i32>) {
586fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_0_DECL:.*]]:2 = hlfir.declare %[[ARG_0]](%{{.*}}) {uniq_name = "_QFomp_target_parallel_doEa"} : (!fir.ref<!fir.array<1024xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<1024xi32>>, !fir.ref<!fir.array<1024xi32>>)
587fbaf2c6cSAkash Banerjee      !CHECK: omp.parallel
588c360ce0cSKiran Chandramohan      !$omp target parallel do map(tofrom: a)
589*937cbce1SKareem Ergawy         !CHECK: %[[I_PVT_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
590*937cbce1SKareem Ergawy         !CHECK: %[[I_PVT_DECL:.*]]:2 = hlfir.declare %[[I_PVT_ALLOCA]] {uniq_name = "_QFomp_target_parallel_doEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
591*937cbce1SKareem Ergawy         !CHECK: omp.wsloop {
592ca4dbc27SSergio Afonso         !CHECK-NEXT: omp.loop_nest (%[[I_VAL:.*]]) : i32
593c360ce0cSKiran Chandramohan         do i = 1, 1024
594c360ce0cSKiran Chandramohan           !CHECK:   fir.store %[[I_VAL]] to %[[I_PVT_DECL]]#1 : !fir.ref<i32>
595c360ce0cSKiran Chandramohan           !CHECK:   %[[C10:.*]] = arith.constant 10 : i32
596c360ce0cSKiran Chandramohan           !CHECK:   %[[I_PVT_VAL:.*]] = fir.load %[[I_PVT_DECL]]#0 : !fir.ref<i32>
597c360ce0cSKiran Chandramohan           !CHECK:   %[[I_VAL:.*]] = fir.convert %[[I_PVT_VAL]] : (i32) -> i64
598c360ce0cSKiran Chandramohan           !CHECK:   %[[A_I:.*]] = hlfir.designate %[[VAL_0_DECL]]#0 (%[[I_VAL]])  : (!fir.ref<!fir.array<1024xi32>>, i64) -> !fir.ref<i32>
599c360ce0cSKiran Chandramohan           !CHECK:   hlfir.assign %[[C10]] to %[[A_I]] : i32, !fir.ref<i32>
600c360ce0cSKiran Chandramohan            a(i) = 10
601c360ce0cSKiran Chandramohan         end do
602c360ce0cSKiran Chandramohan         !CHECK: omp.yield
603c360ce0cSKiran Chandramohan         !CHECK: }
604c360ce0cSKiran Chandramohan         !CHECK: }
605c360ce0cSKiran Chandramohan      !CHECK: omp.terminator
606c360ce0cSKiran Chandramohan      !CHECK: }
607ca4dbc27SSergio Afonso   !CHECK: omp.terminator
608ca4dbc27SSergio Afonso   !CHECK: }
609c360ce0cSKiran Chandramohan   !$omp end target parallel do
610c360ce0cSKiran Chandramohanend subroutine omp_target_parallel_do
611fbaf2c6cSAkash Banerjee
612fbaf2c6cSAkash Banerjee!===============================================================================
613fbaf2c6cSAkash Banerjee! Target with unstructured code
614fbaf2c6cSAkash Banerjee!===============================================================================
615fbaf2c6cSAkash Banerjee
616fbaf2c6cSAkash Banerjee!CHECK-LABEL:   func.func @_QPtarget_unstructured() {
617fbaf2c6cSAkash Banerjeesubroutine target_unstructured
618fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFtarget_unstructuredEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
619fbaf2c6cSAkash Banerjee   integer :: i = 1
620fbaf2c6cSAkash Banerjee   !CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFtarget_unstructuredEj"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
621fbaf2c6cSAkash Banerjee   integer :: j = 11
622d84252e0SSergio Afonso   !CHECK: %[[VAL_4:.*]] = omp.map.info var_ptr(%[[VAL_1]]#1 : !fir.ref<i32>, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !fir.ref<i32> {name = "i"}
623d84252e0SSergio Afonso   !CHECK: %[[VAL_5:.*]] = omp.map.info var_ptr(%[[VAL_3]]#1 : !fir.ref<i32>, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !fir.ref<i32> {name = "j"}
624fbaf2c6cSAkash Banerjee   !CHECK: omp.target map_entries(%[[VAL_4]] -> %[[VAL_6:.*]], %[[VAL_5]] -> %[[VAL_7:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
625fbaf2c6cSAkash Banerjee   !$omp target
626fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_8:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFtarget_unstructuredEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
627fbaf2c6cSAkash Banerjee      !CHECK: %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_7]] {uniq_name = "_QFtarget_unstructuredEj"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
628fbaf2c6cSAkash Banerjee      !CHECK: ^bb1:
629fbaf2c6cSAkash Banerjee      do while (i <= j)
630fbaf2c6cSAkash Banerjee         !CHECK: ^bb2:
631fbaf2c6cSAkash Banerjee         i = i + 1
632fbaf2c6cSAkash Banerjee      end do
633fbaf2c6cSAkash Banerjee      !CHECK: ^bb3:
634fbaf2c6cSAkash Banerjee      !CHECK: omp.terminator
635fbaf2c6cSAkash Banerjee   !$omp end target
636fbaf2c6cSAkash Banerjee   !CHECK: }
637fbaf2c6cSAkash Banerjeeend subroutine target_unstructured
638