xref: /llvm-project/flang/test/Lower/OpenMP/declare-target-data.f90 (revision 00ab44ee66dbcf0d32819dbc6e4eefd1b7c48dfa)
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