On Wed, 24 Jan 2018, Tom de Vries wrote:

> Hi,
> 
> atm the test-case contained in this patch hangs.
> 
> For the test-case we generate:
> ...
>   @ %r79 bra $L18;
>   {
>     call _gfortran_abort;
>     trap;
>     exit;
>   }
>  $L18:
> ...
> 
> which results in SASS code (at GOMP_NVPTX_JIT=-O4):
> ...
>         /*05d8*/               @P0 BRA `(.L_18);
>         /*05e8*/                   JCAL `(_gfortran_abort);
>         /*05f0*/                   BPT.TRAP 0x1;
>         /*05f8*/                   EXIT;
> .L_18:
> ...
> There's no convergence point generated for the diverging branch, so we may end
> up executing random code after .L18 (a problem I long suspected could happen,
> but never observed until now).
> 
> The patch adds an exit on the other path, making sure that all threads in the
> warp reach exit, and indeed fixing the hang:
> ...
>   @ %r79 bra $L18;
>   {
>     call _gfortran_abort;
>     trap;
>     exit;
>   }
>  $L18:
>  exit;
> ...
> 
> Build and reg-tested on x86_64 with nvptx accelerator.
> 
> I'll commit this shortly for stage4. Strictly speaking, this is not an 8
> regression, but a wrong code bug. But I think that the code generation error
> seems fundamental enough, and the fix simple and localized enough, that it's
> stage4 permissible.

wrong-code bugs qualify for stage4 if a fix isn't too invasive.  Target
maintainers have an extra say to override stage4 rules anyway and for
non-primary/secondary targets nobody cares anyway.

Richard.

> Thanks,
> - Tom
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to