openmp: Also implicitly mark as declare target to functions mentioned in target regions
authorJakub Jelinek <jakub@redhat.com>
Thu, 14 May 2020 07:48:32 +0000 (09:48 +0200)
committerJakub Jelinek <jakub@redhat.com>
Thu, 14 May 2020 07:48:32 +0000 (09:48 +0200)
commit49ddde69fc8e1e4c48d4b0027ea37ac862da0f1f
tree5cb3ecbf1dbf9cc8e8e3b975b3f83a959e3353de
parent42ef8a5e662a765dc794a7a5c0227bcd83556e44
openmp: Also implicitly mark as declare target to functions mentioned in target regions

OpenMP 5.0 also specifies that functions referenced from target regions
(except for target regions with device(ancestor:)) are also implicitly declare target to.

This patch implements that.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

* function.h (struct function): Add has_omp_target bit.
* omp-offload.c (omp_discover_declare_target_fn_r): New function,
old renamed to ...
(omp_discover_declare_target_tgt_fn_r): ... this.
(omp_discover_declare_target_var_r): Call
omp_discover_declare_target_tgt_fn_r instead of
omp_discover_declare_target_fn_r.
(omp_discover_implicit_declare_target): Also queue functions with
has_omp_target bit set, for those walk with
omp_discover_declare_target_fn_r, for declare target to functions
walk with omp_discover_declare_target_tgt_fn_r.
gcc/c/
* c-parser.c (c_parser_omp_target): Set cfun->has_omp_target.
gcc/cp/
* cp-gimplify.c (cp_genericize_r): Set cfun->has_omp_target.
gcc/fortran/
* trans-openmp.c: Include function.h.
(gfc_trans_omp_target): Set cfun->has_omp_target.
libgomp/
* testsuite/libgomp.c-c++-common/target-40.c: New test.
gcc/ChangeLog
gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c
gcc/fortran/ChangeLog
gcc/fortran/trans-openmp.c
gcc/function.h
gcc/omp-offload.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c-c++-common/target-40.c [new file with mode: 0644]