Jakub?
https://gcc.gnu.org/ml/gcc-patches/2015-09/msg01287.html
On 09/17/15 10:40, Nathan Sidwell wrote:
Updated patch addressing your points. Some further comments though ...
+ while (GOMP_LAUNCH_PACK (GOMP_LAUNCH_END, 0, 0)
+ != (tag = va_arg (ap, unsigned)))
That's a somewhat non-idiomatic way to write this, with the constant first and
not obviously a constant. I'd initialize a variable with the constant before the
loop.
I went with
while ((tag = va_arg (...)) != 0) ...
and killed GOMP_LAUNCH_END throughout, using explicit '0'.
+ assert (!GOMP_LAUNCH_DEVICE (tag));
Uh, that seems unfriendly, and not exactly forwards compatible. Can that fail a
bit more gracefully? (Alternatively, implement the device_type stuff now so that
we don't have TODOs in the code and don't have to worry about compatibility
issues.)
Added call to gomp_fatal, indicating libgomp is out of date. Also added a
default to the switch following with the same effect. The trouble with
implementing handling of device_type here now, is difficulty in testing its
correctness. If it were buggy we'd be in a worse position than not having it.
+GOACC_2.0,1 {
+ global:
+ GOACC_parallel_keyed;
+} GOACC_2.0;
Did you mean to use a comma?
I misunderstood your comment as 'did you mean to use a comma where you used
something else', not 'is that comma a typo?' well spotted!
+ else if (!tagging)
Oh... so tagging controls two different methods for constructing argument lists,
one for GOACC_parallel and the other for whatever OMP uses? That's a bit
unfortunate, I'll need to think about it for a bit or defer to Jakub.
My earlier description was lacking. The memory arguments have already been
pushed before that switch. This is just dealing with async & wait args. I
found it easier to modify the existing code path and have a tagging flag, rather
than duplicate it.
nathan