diff options
author | Kwok Cheung Yeung <kcy@codesourcery.com> | 2020-12-18 08:26:34 -0800 |
---|---|---|
committer | Kwok Cheung Yeung <kcy@codesourcery.com> | 2020-12-18 08:38:30 -0800 |
commit | 3af02d32cce2ff1ff11d078cf8094305f57ca179 (patch) | |
tree | a9affc2bf477cd04d393cc9b5aa6392b54074a42 /gcc/cp/decl2.c | |
parent | 7ff5706fcd732b671afb2d308e8dab7e23050823 (diff) | |
download | gcc-3af02d32cce2ff1ff11d078cf8094305f57ca179.zip gcc-3af02d32cce2ff1ff11d078cf8094305f57ca179.tar.gz gcc-3af02d32cce2ff1ff11d078cf8094305f57ca179.tar.bz2 |
openmp: Implicitly add 'declare target' directives for dynamic initializers in C++
2020-12-18 Kwok Cheung Yeung <kcy@codesourcery.com>
gcc/
* langhooks-def.h (lhd_get_decl_init): New.
(lhd_finish_decl_inits): New.
(LANG_HOOKS_GET_DECL_INIT): New.
(LANG_HOOKS_OMP_FINISH_DECL_INITS): New.
(LANG_HOOKS_DECLS): Add LANG_HOOKS_GET_DECL_INIT and
LANG_HOOKS_OMP_FINISH_DECL_INITS.
* langhooks.c (lhd_omp_get_decl_init): New.
(lhd_omp_finish_decl_inits): New.
* langhooks.h (struct lang_hooks_for_decls): Add omp_get_decl_init
and omp_finish_decl_inits.
* omp-offload.c (omp_discover_declare_target_var_r): Use
get_decl_init langhook in place of DECL_INITIAL. Call
omp_finish_decl_inits langhook at end of function.
gcc/cp/
* cp-lang.c (cxx_get_decl_init): New.
(cxx_omp_finish_decl_inits): New.
(LANG_HOOKS_GET_DECL_INIT): New.
(LANG_HOOKS_OMP_FINISH_DECL_INITS): New.
* cp-tree.h (dynamic_initializers): New.
* decl.c (dynamic_initializers): New.
* decl2.c (c_parse_final_cleanups): Add initializer entries
from vars to dynamic_initializers.
gcc/testsuite/
* g++.dg/gomp/declare-target-3.C: New.
Diffstat (limited to 'gcc/cp/decl2.c')
-rw-r--r-- | gcc/cp/decl2.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 6d8158a..af88e7f 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -5006,6 +5006,13 @@ c_parse_final_cleanups (void) loop. */ if (tree vars = prune_vars_needing_no_initialization (&static_aggregates)) { + if (flag_openmp) + /* Add initializer information from VARS into + DYNAMIC_INITIALIZERS. */ + for (t = vars; t; t = TREE_CHAIN (t)) + hash_map_safe_put<hm_ggc> (dynamic_initializers, + TREE_VALUE (t), TREE_PURPOSE (t)); + /* We need to start a new initialization function each time through the loop. That's because we need to know which vtables have been referenced, and TREE_SYMBOL_REFERENCED |