On Wed, Jan 18, 2017 at 03:22:15PM +0100, Richard Biener wrote:
> > So I guess a way to keep allocation layout implicit until after inlining is
> > this: instead of exposing the helper struct in the IR immediately, somehow 
> > keep
> > it on the side, associated only with the SIMT region, and not finalized.  
> > This
> > would allow to populate it as needed during inlining, but the downside is 
> > that
> > references to privatized vars would get weirder: they would need to be via 
> > IFNs
> > that track association with the loop and the privatized variable.  Like 
> > this:
> >
> >   void *omp_simt = IFN_GOMP_SIMT_ENTER_BY_UID (simduid);
> >
> >   int *tmp_ptr = IFN_GOMP_SIMT_VAR_REF (omp_simt, simduid, uid_for_tmp);
> >
> >   for (...)
> >     foo (tmp_ptr);
> >
> >   *tmp_ptr = {CLOBBER}; /* ??? for each privatized variable? */
> >   IFN_GOMP_SIMT_EXIT (.omp_simt);
> >
> > (note how in this scheme we'd need to emit separate CLOBBERs for each field)
> >
> > But absence of explicit struct would hurt alias analysis I'm afraid: it 
> > wouldn't
> > be able to deduce that references to different privatized variable do not 
> > alias
> > until after calls to SIMT_VAR_REF are replaced.  Or is that not an issue?
> 
> It probably is.
> 
> But I guess I was asking whether you could initially emit
> 
>  void *omp_simt = IFN_GOMP_SIMT_ENTER (0);
> 
>   for (int i = n1; i < n2; i++)
>      foo (&tmp);
> 
>   IFN_GOMP_SIMT_EXIT (omp_simt);
> 
> and only after inlining do liveness / use analysis of everything between
> SIMT_ENTER and SIMT_EXIT doing the rewriting only at that point.

Can't it be e.g. recorded inside a flag on the VAR_DECLs or magic attributes
on them during omplower time and then only finalized into the magic .local
alloca in the pass_omp_device_lower pass?  The inliner would need to be able
to add those flags or magic attributes also when duplicating vars/parameters
from inline functions into the SIMT region (perhaps some flag on GIMPLE_CALL
stmts, or on bbs in the simt region, or something similar could turn that
behavior on in the inliner)?

        Jakub

Reply via email to