diff options
author | Marcel Vollweiler <marcel@codesourcery.com> | 2022-05-16 01:02:50 -0700 |
---|---|---|
committer | Marcel Vollweiler <marcel@codesourcery.com> | 2022-05-16 01:02:50 -0700 |
commit | b4fb9f4f9a10d825302cfb5a0ecefa796570d8bc (patch) | |
tree | 251a4b967b88d8dea7ae372690cee6d41273f795 /gcc | |
parent | ec69db6be6912e45fa5f54f2d231d56e52612f1d (diff) | |
download | gcc-b4fb9f4f9a10d825302cfb5a0ecefa796570d8bc.zip gcc-b4fb9f4f9a10d825302cfb5a0ecefa796570d8bc.tar.gz gcc-b4fb9f4f9a10d825302cfb5a0ecefa796570d8bc.tar.bz2 |
OpenMP, C++: Add template support for the has_device_addr clause.
This patch adds support for list items in the has_device_addr clause which type
is given by C++ template parameters.
gcc/cp/ChangeLog:
* pt.cc (tsubst_omp_clauses): Added OMP_CLAUSE_HAS_DEVICE_ADDR.
* semantics.cc (finish_omp_clauses): Added template decl processing.
libgomp/ChangeLog:
* testsuite/libgomp.c++/target-has-device-addr-7.C: New test.
* testsuite/libgomp.c++/target-has-device-addr-8.C: New test.
* testsuite/libgomp.c++/target-has-device-addr-9.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/pt.cc | 2 | ||||
-rw-r--r-- | gcc/cp/semantics.cc | 10 |
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index fa05e91..5037627 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -17722,6 +17722,7 @@ tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort, case OMP_CLAUSE_USE_DEVICE_PTR: case OMP_CLAUSE_USE_DEVICE_ADDR: case OMP_CLAUSE_IS_DEVICE_PTR: + case OMP_CLAUSE_HAS_DEVICE_ADDR: case OMP_CLAUSE_INCLUSIVE: case OMP_CLAUSE_EXCLUSIVE: OMP_CLAUSE_DECL (nc) @@ -17867,6 +17868,7 @@ tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort, case OMP_CLAUSE_USE_DEVICE_PTR: case OMP_CLAUSE_USE_DEVICE_ADDR: case OMP_CLAUSE_IS_DEVICE_PTR: + case OMP_CLAUSE_HAS_DEVICE_ADDR: case OMP_CLAUSE_INCLUSIVE: case OMP_CLAUSE_EXCLUSIVE: case OMP_CLAUSE_ALLOCATE: diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 61f49be..cd7a281 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -8575,14 +8575,20 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort) else { t = OMP_CLAUSE_DECL (c); + while (TREE_CODE (t) == TREE_LIST) + t = TREE_CHAIN (t); while (TREE_CODE (t) == INDIRECT_REF || TREE_CODE (t) == ARRAY_REF) t = TREE_OPERAND (t, 0); } } - bitmap_set_bit (&is_on_device_head, DECL_UID (t)); if (VAR_P (t) || TREE_CODE (t) == PARM_DECL) - cxx_mark_addressable (t); + { + bitmap_set_bit (&is_on_device_head, DECL_UID (t)); + if (!processing_template_decl + && !cxx_mark_addressable (t)) + remove = true; + } goto check_dup_generic_t; case OMP_CLAUSE_USE_DEVICE_ADDR: |