[Bug middle-end/94876] New: [OpenACC] Unhelpful mapping for 'DECL_ARTIFICIAL' inside OpenACC 'kernels' regions

tschwinge at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 30 11:08:01 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94876

            Bug ID: 94876
           Summary: [OpenACC] Unhelpful mapping for 'DECL_ARTIFICIAL'
                    inside OpenACC 'kernels' regions
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: openacc
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tschwinge at gcc dot gnu.org
                CC: burnus at gcc dot gnu.org, jakub at gcc dot gnu.org
  Target Milestone: ---

Created attachment 48418
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48418&action=edit
'gcc/testsuite/c-c++-common/goacc/pr.c'

This is somewhat conceptually related to PR94874 "[OpenMP] Unhelpful
'defaultmap(none)' diagnostic for 'DECL_ARTIFICIAL': 'error: ‘array_li.0’ not
specified in enclosing ‘target’'".

For OpenACC, we seem to be (totally/only?) relying on
'gcc/gimplify.c:oacc_default_clause' for determining how 'DECL_ARTIFICIAL'
objects are transported to the device.  In particular, for OpenACC 'kernels'
constructs, they inherit the behavior that "Scalars default to 'copy'" --
instead of the (supposedly) expected 'firstprivate'.  Even if not causing any
harm (now), that's definitely unfortunate/non-optimal.

See the 'gcc/testsuite/c-c++-common/goacc/pr.c' I'm attaching.


As mentioned in PR94874:

| I suppose for all such compiler-generated ('DECL_ARTIFICIAL') objects, we
shouldn't generate 'default(none)' diagnostics [we don't for OpenACC], but
instead make them available on the offloading device in the "best possible"
way.  (..., which probably defaults to 'firstprivate' given that these are
typically small-size objects?)  (Regarding the latter, see also
'gcc/gimplify.c:omp_shared_to_firstprivate_optimizable_decl_p', which applies
similar rationale regarding "large decls".)
|
| Also, for conceptual simplicity, I suppose any such compiler-generated
('DECL_ARTIFICIAL') objects should in some way be marked up with 'firstprivate'
clauses "explicitly by the compiler" when they are created, instead of having
['oacc_default_clause'] etc. do that.  (I have not studied that in detail.)  My
inclination would be to put an 'gcc_assert (!DECL_ARTIFICIAL(decl))' there? 
But maybe that's too hard.  Also need to sort out how that relates to
'lang_hooks.decls.omp_predetermined_sharing' etc.


More information about the Gcc-bugs mailing list