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