On Thu, 13 Jun 2019 at 14:29, Jan Hubicka <hubi...@ucw.cz> wrote:
>
> > >  1) indirect_refs_may_alias_decl_p passing ref2_is_decl as true to
> > >     aliasing_component_refs_p.
> > >
> > >     This makes aliasing_component_refs_p to assume that all access paths
> > >     conflicting with REF2 must start by type of BASE2 or its subtype.
> > >
> > >     IMO this is not quite right in gimple memory model where decls are 
> > > just
> > >     untyped memory slots, since I can, for example, I can rewrite decl
> > >     of type a by a new data of type struct b {struct a a;};
> > >     which will confuse this logic.
> >
> > The above check you complain about guards against this.
>
> Not sufficinly.  ref1 can be store of type "struct b".  With ref2 of
> base type "struct a" (which is in conflict) the oracle will currently
> disambiguate because it will not consider the path
> "struct b"..."struct a" due to that ref2_is_decl check.
>
> > >      Sincce we already checked that TREEE_TYPE (ptrtype) is same as 
> > > TREE_TYPE (base1)
> > >      the same_type_for_tbaa check is equivalent in both.
> > >
> > >      Notice however that first tests that array is VLA, while other
> > >      supports partial overlaps on all array types.  I suppose we want to
> > >      choose which way we support that and go with one or another.
> >
> > Let's go with the stricter check for the purpose of unification and work
> > on this issue as followup.
>
> Yep, that is my plan.  W/o that this that alias-2.c array overlap
> testcase would break (and it breaks if one of accesses is through decl).
>
> Concerning the unification, I am still confinced we want to test
> base2_alias_set to be non-zero in indirect_ref_may_alias_decl_p
> (same way as we do in indirect_refs_may_alias_p) as discussed in thread
> https://gcc.gnu.org/ml/gcc-patches/2019-06/msg00087.html
> Because we can not assume that there are no dynamic type changes on
> decls in gimple memory model.
>
> I also need to dig into the divergence between
> nonoverlapping_component_refs_of_decl_p and
> nonoverlapping_component_refs_p. It seems to me that having the decl in
> hand does not buy us much here either.
>
> Notice that one tries to match structures only, while other handles
> unions too.  For LTO as well for code merging even w/o LTO it would be
> nice to keep alias between
>  union {int a; int b;};
> and ptr->a an ptr->b (which we currently do), but it seems it is
> guaranteed only by the second function.
>

Hi!

Since this was committed (r272247), I've noticed a failure to build
glibc-2.29 for aarch64:
#'target_mem_ref' not supported by expression#'pmap_rmt.c: In function
'clnt_broadcast':
pmap_rmt.c:298:19: error:  may be used uninitialized in this function
[-Werror=maybe-uninitialized]
  298 |    baddr.sin_addr = addrs[i];
      |    ~~~~~~~~~~~~~~~^~~~~~~~~~

while compiling sunrpc/pmap_rmt.os

Christophe



> Honza

Reply via email to