1!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 %s -o - | FileCheck %s 2!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=52 -fopenmp-is-target-device %s -o - | FileCheck %s 3 4module test_0 5 implicit none 6 7!CHECK-DAG: fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : i32 8INTEGER :: data_int = 10 9!$omp declare target link(data_int) 10 11!CHECK-DAG: fir.global @_QMtest_0Earray_1d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<3xi32> 12INTEGER :: array_1d(3) = (/1,2,3/) 13!$omp declare target link(array_1d) 14 15!CHECK-DAG: fir.global @_QMtest_0Earray_2d({{.*}}) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<2x2xi32> 16INTEGER :: array_2d(2,2) = reshape((/1,2,3,4/), (/2,2/)) 17!$omp declare target link(array_2d) 18 19!CHECK-DAG: fir.global @_QMtest_0Ept1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.box<!fir.ptr<i32>> 20INTEGER, POINTER :: pt1 21!$omp declare target link(pt1) 22 23!CHECK-DAG: fir.global @_QMtest_0Ept2_tar {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} target : i32 24INTEGER, TARGET :: pt2_tar = 5 25!$omp declare target link(pt2_tar) 26 27!CHECK-DAG: fir.global @_QMtest_0Ept2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.box<!fir.ptr<i32>> 28INTEGER, POINTER :: pt2 => pt2_tar 29!$omp declare target link(pt2) 30 31!CHECK-DAG: fir.global @_QMtest_0Edata_int_to {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32 32INTEGER :: data_int_to = 5 33!$omp declare target to(data_int_to) 34 35!CHECK-DAG: fir.global @_QMtest_0Edata_int_enter {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : i32 36INTEGER :: data_int_enter = 5 37!$omp declare target enter(data_int_enter) 38 39!CHECK-DAG: fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32 40INTEGER :: data_int_clauseless = 1 41!$omp declare target(data_int_clauseless) 42 43!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32 44!CHECK-DAG: fir.global @_QMtest_0Edata_extended_to_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32 45REAL :: data_extended_to_1 = 2 46REAL :: data_extended_to_2 = 3 47!$omp declare target to(data_extended_to_1, data_extended_to_2) 48 49!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : f32 50!CHECK-DAG: fir.global @_QMtest_0Edata_extended_enter_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : f32 51REAL :: data_extended_enter_1 = 2 52REAL :: data_extended_enter_2 = 3 53!$omp declare target enter(data_extended_enter_1, data_extended_enter_2) 54 55!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32 56!CHECK-DAG: fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32 57REAL :: data_extended_link_1 = 2 58REAL :: data_extended_link_2 = 3 59!$omp declare target link(data_extended_link_1, data_extended_link_2) 60 61contains 62end module test_0 63 64PROGRAM commons 65 !CHECK-DAG: fir.global @numbers_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : tuple<f32, f32> { 66 REAL :: one = 1 67 REAL :: two = 2 68 COMMON /numbers/ one, two 69 !$omp declare target(/numbers/) 70 71 !CHECK-DAG: fir.global @numbers_link_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : tuple<f32, f32> { 72 REAL :: one_link = 1 73 REAL :: two_link = 2 74 COMMON /numbers_link/ one_link, two_link 75 !$omp declare target link(/numbers_link/) 76 77 !CHECK-DAG: fir.global @numbers_to_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : tuple<f32, f32> { 78 REAL :: one_to = 1 79 REAL :: two_to = 2 80 COMMON /numbers_to/ one_to, two_to 81 !$omp declare target to(/numbers_to/) 82 83 !CHECK-DAG: fir.global @numbers_enter_ {alignment = 4 : i64, omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (enter)>} : tuple<f32, f32> { 84 REAL :: one_enter = 1 85 REAL :: two_enter = 2 86 COMMON /numbers_enter/ one_enter, two_enter 87 !$omp declare target enter(/numbers_enter/) 88END 89