This patch turns off the middle-end worker-partitioning support if the number of workers for an outlined offload function is one. In that case, we do not need to perform the broadcasting/neutering code transformation.
OK for og10 branch? Julian ChangeLog gcc/ * omp-offload.c (pass_oacc_gimple_workers::gate): Disable worker partitioning if num_workers is 1. --- gcc/omp-offload.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index bf72782ba4ce..2b730d057781 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -2165,7 +2165,20 @@ public: /* opt_pass methods: */ virtual bool gate (function *) { - return flag_openacc && targetm.goacc.worker_partitioning; + if (!flag_openacc || !targetm.goacc.worker_partitioning) + return false; + + tree attr = oacc_get_fn_attrib (current_function_decl); + + if (!attr) + /* Not an offloaded function. */ + return false; + + int worker_dim + = oacc_get_fn_dim_size (current_function_decl, GOMP_DIM_WORKER); + + /* No worker partitioning if we know the number of workers is 1. */ + return worker_dim != 1; }; virtual unsigned int execute (function *) -- 2.23.0