1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* { dg-do compile } */
/* { dg-additional-options "-fdump-tree-gimple" } */
struct S { int s; };
void foo (char *);
void bar (int, char *, struct S, int *);
#pragma omp declare target to (bar)
#define N 16
void
f1 (int sc1, struct S ag1, int *pt1)
{
char ar1[N];
foo (ar1);
#pragma omp target
bar (sc1, ar1, ag1, pt1);
/* { dg-final { scan-tree-dump "firstprivate\\(sc1\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ar1" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ag1" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(firstprivate:pt1 .pointer assign" "gimple" } } */
}
void
f2 (int sc2, struct S ag2, int *pt2)
{
char ar2[N];
foo (ar2);
#pragma omp target firstprivate (sc2, ar2, ag2, pt2) defaultmap (none)
bar (sc2, ar2, ag2, pt2);
/* { dg-final { scan-tree-dump "firstprivate\\(sc2\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ar2\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ag2\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(pt2\\)" "gimple" } } */
}
void
f3 (int sc3, struct S ag3, int *pt3)
{
char ar3[N];
foo (ar3);
#pragma omp target defaultmap(none:scalar) defaultmap(none:aggregate) \
map (sc3, ar3, ag3, pt3) defaultmap(none:pointer)
bar (sc3, ar3, ag3, pt3);
/* { dg-final { scan-tree-dump "map\\(tofrom:sc3" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ar3" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ag3" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:pt3" "gimple" } } */
}
void
f4 (int sc4, struct S ag4, int *pt4)
{
char ar4[N];
foo (ar4);
#pragma omp target defaultmap(tofrom:scalar)
bar (sc4, ar4, ag4, pt4);
/* { dg-final { scan-tree-dump "map\\(tofrom:sc4" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ar4" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:ag4" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(firstprivate:pt4 .pointer assign" "gimple" } } */
}
void
f5 (int sc5, struct S ag5, int *pt5)
{
char ar5[N];
foo (ar5);
#pragma omp target defaultmap(to)
bar (sc5, ar5, ag5, pt5);
/* { dg-final { scan-tree-dump "map\\(to:sc5" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(to:ar5" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(to:ag5" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(to:pt5" "gimple" } } */
}
void
f6 (int sc6, struct S ag6, int *pt6)
{
char ar6[N];
foo (ar6);
#pragma omp target defaultmap(firstprivate)
bar (sc6, ar6, ag6, pt6);
/* { dg-final { scan-tree-dump "firstprivate\\(sc6\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ar6\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ag6\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(pt6\\)" "gimple" } } */
}
void
f7 (int sc7, struct S ag7, int *pt7)
{
char ar7[N];
foo (ar7);
#pragma omp target defaultmap(alloc: scalar) defaultmap(from: aggregate) defaultmap(default: pointer)
{
int *q = &sc7;
*q = 6;
ag7.s = 5;
int i;
for (i = 0; i < N; ++i)
ar7[i] = 7;
bar (sc7, ar7, ag7, pt7);
}
/* { dg-final { scan-tree-dump "map\\(alloc:sc7" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(from:ar7" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(from:ag7" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(firstprivate:pt7 .pointer assign" "gimple" } } */
}
void
f8 (int sc8, struct S ag8, int *pt8)
{
char ar8[N];
foo (ar8);
#pragma omp target defaultmap(firstprivate:aggregate) defaultmap(none:scalar) \
defaultmap(tofrom:pointer) map(to: sc8)
bar (sc8, ar8, ag8, pt8);
/* { dg-final { scan-tree-dump "map\\(to:sc8" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ar8\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "firstprivate\\(ag8\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "map\\(tofrom:pt8" "gimple" } } */
}
void
f9 (int sc9, struct S ag9)
{
char ar9[sc9 + 2];
foo (ar9);
#pragma omp target defaultmap(none) map(to: ar9, ag9) firstprivate (sc9)
bar (sc9, ar9, ag9, &sc9);
}
|