diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-02-09 08:17:10 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-02-09 08:17:10 +0100 |
commit | 9bc3b95dfefd37d860c5dc0004f8a53f6290fbb1 (patch) | |
tree | 3c52ec4eaaf12982e117be6ae6dd5ed634055cbf /libgomp | |
parent | a5691173e6142b11c5d45bed073ff65bfe1f2d73 (diff) | |
download | gcc-9bc3b95dfefd37d860c5dc0004f8a53f6290fbb1.zip gcc-9bc3b95dfefd37d860c5dc0004f8a53f6290fbb1.tar.gz gcc-9bc3b95dfefd37d860c5dc0004f8a53f6290fbb1.tar.bz2 |
openmp: Optimize DECL_IN_CONSTANT_POOL vars in target regions
DECL_IN_CONSTANT_POOL are shared and thus don't really get emitted in the
BLOCK where they are used, so for OpenMP target regions that have initializers
gimplified into copying from them we actually map them at runtime from host to
offload devices. This patch instead marks them as "omp declare target", so
that they are on the target device from the beginning and don't need to be
copied there.
2020-02-09 Jakub Jelinek <jakub@redhat.com>
* gimplify.c (gimplify_adjust_omp_clauses_1): Promote
DECL_IN_CONSTANT_POOL variables into "omp declare target" to avoid
copying them around between host and target.
* testsuite/libgomp.c/target-38.c: New test.
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 4 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c/target-38.c | 28 |
2 files changed, 32 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ba14005..0740df8 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,7 @@ +2020-02-09 Jakub Jelinek <jakub@redhat.com> + + * testsuite/libgomp.c/target-38.c: New test. + 2020-02-06 Jakub Jelinek <jakub@redhat.com> PR libgomp/93515 diff --git a/libgomp/testsuite/libgomp.c/target-38.c b/libgomp/testsuite/libgomp.c/target-38.c new file mode 100644 index 0000000..8169972 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/target-38.c @@ -0,0 +1,28 @@ +#define A(n) n##0, n##1, n##2, n##3, n##4, n##5, n##6, n##7, n##8, n##9 +#define B(n) A(n##0), A(n##1), A(n##2), A(n##3), A(n##4), A(n##5), A(n##6), A(n##7), A(n##8), A(n##9) + +int +foo (int x) +{ + int b[] = { B(4), B(5), B(6) }; + return b[x]; +} + +int v[] = { 1, 2, 3, 4, 5, 6 }; +#pragma omp declare target to (foo, v) + +int +main () +{ + int i = 5; + asm ("" : "+g" (i)); + #pragma omp target map(tofrom:i) + { + int a[] = { B(1), B(2), B(3) }; + asm ("" : : "m" (a) : "memory"); + i = a[i] + foo (i) + v[i & 63]; + } + if (i != 105 + 405 + 6) + __builtin_abort (); + return 0; +} |