[nvptx] propagating conditionals in worker-vector partitioned loops

Tom de Vries Tom_deVries@mentor.com
Wed Apr 11 08:59:00 GMT 2018


On 10/27/2016 12:29 AM, Cesar Philippidis wrote:
> Currently, the nvptx backend is only neutering the worker axis when
> propagating variables used in conditional expressions across the worker
> and vector axes. That's a problem with the worker-state spill and fill
> propagation implementation because all of the vector threads in worker 0
> all write the the same address location being spilled. As the attached
> test case demonstrates, this might cause an infinite loop depending on
> the values in the vector threads being propagated.
> 
> This patch fixes this issue by introducing a new worker-vector
> predicate, so that both the worker and vector threads can be predicated
> together, not separately. I.e., instead of first neutering worker axis,
> then neutering the vector axis, this patch uses a single predicate for
> tid.x == 0 && tid.y == 0.
> 
> Is this patch ok for trunk?

Hi Cesar,

Please, when encountering a bug on trunk or release branch always file a PR.

I accidentally found this bug recently, filed it as PR85204 - "[nvptx] 
infinite loop generated", and then fixed it here: 
https://gcc.gnu.org/ml/gcc-patches/2018-04/msg00232.html .

The patch you propose is not correct because it introduces a diverging 
branch marked with .uni.

Thanks,
- Tom



More information about the Gcc-patches mailing list