xref: /llvm-project/flang/test/Semantics/OpenMP/implicit-dsa.f90 (revision 8e10a3f80e264aaa186ab3cc74fea840f453c66d)
1! RUN: %python %S/../test_symbols.py %s %flang_fc1 -fopenmp
2
3! Test symbols generated in block constructs that have implicitly
4! determined DSAs.
5
6! Basic cases.
7!DEF: /implicit_dsa_test1 (Subroutine) Subprogram
8subroutine implicit_dsa_test1
9  !DEF: /implicit_dsa_test1/i ObjectEntity INTEGER(4)
10  !DEF: /implicit_dsa_test1/x ObjectEntity INTEGER(4)
11  !DEF: /implicit_dsa_test1/y ObjectEntity INTEGER(4)
12  !DEF: /implicit_dsa_test1/z ObjectEntity INTEGER(4)
13  integer i, x, y, z
14
15  !$omp task private(y) shared(z)
16    !DEF: /implicit_dsa_test1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
17    !DEF: /implicit_dsa_test1/OtherConstruct1/y (OmpPrivate) HostAssoc INTEGER(4)
18    !DEF: /implicit_dsa_test1/OtherConstruct1/z (OmpShared) HostAssoc INTEGER(4)
19    x = y + z
20  !$omp end task
21
22  !$omp task default(shared)
23    !DEF: /implicit_dsa_test1/OtherConstruct2/x HostAssoc INTEGER(4)
24    !DEF: /implicit_dsa_test1/OtherConstruct2/y HostAssoc INTEGER(4)
25    !DEF: /implicit_dsa_test1/OtherConstruct2/z HostAssoc INTEGER(4)
26    x = y + z
27  !$omp end task
28
29  !$omp taskloop
30    !DEF: /implicit_dsa_test1/OtherConstruct3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
31    do i = 0, 10
32      !DEF: /implicit_dsa_test1/OtherConstruct3/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
33      !DEF: /implicit_dsa_test1/OtherConstruct3/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
34      !REF: /implicit_dsa_test1/OtherConstruct3/i
35      x = y + i
36    end do
37  !$omp end taskloop
38end subroutine
39
40! Nested task with implicit firstprivate DSA variable.
41!DEF: /implicit_dsa_test2 (Subroutine) Subprogram
42subroutine implicit_dsa_test2
43  !DEF: /implicit_dsa_test2/x ObjectEntity INTEGER(4)
44  integer x
45
46  !$omp task
47    !$omp task
48      !DEF: /implicit_dsa_test2/OtherConstruct1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
49      x = 1
50    !$omp end task
51  !$omp end task
52end subroutine
53
54! Nested tasks with implicit shared DSA variables.
55!DEF: /implicit_dsa_test3 (Subroutine) Subprogram
56subroutine implicit_dsa_test3
57  !DEF: /implicit_dsa_test3/x ObjectEntity INTEGER(4)
58  !DEF: /implicit_dsa_test3/y ObjectEntity INTEGER(4)
59  !DEF: /implicit_dsa_test3/z ObjectEntity INTEGER(4)
60  integer x, y, z
61
62  !$omp parallel
63    !$omp task
64      !DEF: /implicit_dsa_test3/OtherConstruct1/OtherConstruct1/x HostAssoc INTEGER(4)
65      x = 1
66      !DEF: /implicit_dsa_test3/OtherConstruct1/OtherConstruct1/y HostAssoc INTEGER(4)
67      y = 1
68    !$omp end task
69
70    !$omp task firstprivate(x)
71      !DEF: /implicit_dsa_test3/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate) HostAssoc INTEGER(4)
72      x = 1
73      !DEF: /implicit_dsa_test3/OtherConstruct1/OtherConstruct2/z HostAssoc INTEGER(4)
74      z = 1
75    !$omp end task
76  !$omp end parallel
77end subroutine
78
79! Task with implicit firstprivate DSA variables, enclosed in private context.
80!DEF: /implicit_dsa_test4 (Subroutine) Subprogram
81subroutine implicit_dsa_test4
82  !DEF: /implicit_dsa_test4/x ObjectEntity INTEGER(4)
83  !DEF: /implicit_dsa_test4/y ObjectEntity INTEGER(4)
84  !DEF: /implicit_dsa_test4/z ObjectEntity INTEGER(4)
85  integer x, y, z
86
87  !$omp parallel default(private)
88    !$omp task
89      !DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
90      x = 0
91      !DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct1/z (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
92      z = 1
93    !$omp end task
94
95    !$omp task
96      !DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
97      x = 1
98      !DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct2/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
99      y = 0
100    !$omp end task
101  !$omp end parallel
102end subroutine
103
104! Inner parallel using implicit firstprivate symbol.
105!DEF: /implicit_dsa_test5 (Subroutine) Subprogram
106subroutine implicit_dsa_test5
107  !DEF: /implicit_dsa_test5/x ObjectEntity INTEGER(4)
108  integer x
109
110  !$omp parallel default(private)
111    !$omp task
112      !$omp parallel
113        !DEF: /implicit_dsa_test5/OtherConstruct1/OtherConstruct1/OtherConstruct1/x HostAssoc INTEGER(4)
114        x = 1
115      !$omp end parallel
116    !$omp end task
117  !$omp end parallel
118end subroutine
119
120! Constructs nested inside a task with implicit DSA variables.
121!DEF: /implicit_dsa_test6 (Subroutine) Subprogram
122subroutine implicit_dsa_test6
123  !DEF: /implicit_dsa_test6/x ObjectEntity INTEGER(4)
124  !DEF: /implicit_dsa_test6/y ObjectEntity INTEGER(4)
125  !DEF: /implicit_dsa_test6/z ObjectEntity INTEGER(4)
126  integer x, y, z
127
128  !$omp task
129    !$omp parallel default(private)
130      !DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct1/x (OmpPrivate) HostAssoc INTEGER(4)
131      !DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct1/y (OmpPrivate) HostAssoc INTEGER(4)
132      x = y
133    !$omp end parallel
134
135    !$omp parallel default(firstprivate) shared(y)
136      !DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/y (OmpShared) HostAssoc INTEGER(4)
137      !DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate) HostAssocINTEGER(4)
138      !DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/z (OmpFirstPrivate) HostAssocINTEGER(4)
139      y = x + z
140    !$omp end parallel
141  !$omp end task
142end subroutine
143
144! Test taskgroup - it uses the same scope as task.
145!DEF: /implicit_dsa_test7 (Subroutine) Subprogram
146subroutine implicit_dsa_test7
147  !DEF: /implicit_dsa_test7/x ObjectEntity INTEGER(4)
148  !DEF: /implicit_dsa_test7/y ObjectEntity INTEGER(4)
149  integer x, y
150
151  !$omp task
152    !$omp taskgroup
153      !DEF: /implicit_dsa_test7/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
154      !DEF: /implicit_dsa_test7/OtherConstruct1/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
155      x = y
156    !$omp end taskgroup
157  !$omp end task
158end subroutine
159