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);
}
|