Hi!

Implementing OpenACC support in GCC's frontends, there are things that I
trivially have to reimplement, that are already present for OpenMP.  For
example, the infrastructure for parsing clauses (as attached to OpenACC
and OpenMP directives), and their representation in the GCC internal data
structures.  Given the syntactical similarity of OpenACC and OpenMP, this
infrastructure is similar, too, if not even identical.  Thus, my inner
engineer tells me we ought to share this infrastructure instead of having
a copy of it only different for s%omp%oacc.

For a specific example, I'd like to reuse everything known by omp_clause*
and similar, and extend it with the things OpenACC does
additionally/differently (adding safe-guards, if not already present, to
the OpenMP code so that no clauses specific to OpenACC end up there).

Is this generally an accepted approach?  If yes, should I rename omp* to,
say, oacc_omp* (putting the OpenACC tag first for the simple reason that
it sorts first alphabetically), or can we think of a better tag than
oacc_omp, or should I leave the names as omp* and add comments that these
things are used for OpenACC, too?

Creating a (class) hierarchy of clauses that are valid for both OpenACC
and OpenMP, and then specific ones for only OpenACC or OpenMP, seems
overkill to me; I'd rather have the OpenACC/OpenMP passes that are
handling the shared set of clauses error out if they meet one they aren't
supposed to handle.


Grüße,
 Thomas

Attachment: pgphRIZRynHul.pgp
Description: PGP signature

Reply via email to