https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84498
Bug ID: 84498 Summary: [nvptx, openacc] Don't generate state-propagation inbetween subsequent worker/vector loops Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: vries at gcc dot gnu.org Target Milestone: --- Consider a openacc parallel region with two subsequent worker loops, with no code inbetween the two loops. We have the following sequence of state transitions: 1. worker single 2. worker partitioned 3. worker single 4. worker partitioned 5. worker single At the transition from worker single to worker partitioned (1 -> 2 and 3 -> 4), we propagate the set of live registers from the worker single thread to all the worker threads. At the first transition, we need to propagate all registers, because they haven't been initialized yet in all the workers. At the second transition however, we only need to propagate the registers that have been modified during 3. To do this on a per-register base is more complicated, but if no code is executed during 3, then we know no register was modified inbetween, and we can skip the propagation of all registers.