This patch implements Clang front end support for the OpenMP TR8
present map type modifier. The next patch in this series implements
OpenMP runtime support.
This patch does not implement the present implicit-behavior for
defaultmap or the present motion-modifier for target update.
These can be implemented in subsequent patches.
A present map type modifier behavior that this patch does not
attempt to implement is TR8 sec. 2.22.7.1 "map Clause", p. 319,
L14-16:
If a map clause with a present map-type-modifier is present in a map
clause, then the effect of the clause is ordered before all other
map clauses that do not have the present modifier.
Compare to L10-11:
For a given construct, the effect of a map clause with the to, from,
or tofrom map-type is ordered before the effect of a map clause with
the alloc, release, or delete map-type.
I have some questions before this patch is ready for a detailed
review:
- Is either passage quoted above relevant for any case that does not involve aliasing?
- As far as I can tell, Clang does not implement L10-11 to handle aliasing. Is it expected that it already does? If not, then I think both passages should be implemented together later. Any objections?
- What should the order be in the case of map(tofrom:expr1) map(present,alloc:expr2)?
- The Clang codegen test files are difficult to maintain because of their sizes, but I tried to insert present tests into them anyway to be consistent with the existing always and close tests. I'd like to move all present codegen tests to separate test files. Any objections?
Better to keep original message for <= 5.0. This is what we usually do