On Tue, 2005-11-29 at 22:08 +0100, Richard Guenther wrote:
> The patch below teaches points-to analysis about restrict qualifiers
> of incoming parameters.  It is modeled after the special handling
> of malloc result type pointers, namely creating fake variables we
> point to and thus trigger creation of NMTs.  Unfortunately it doesn't
> exactly work, as for the testcase
> 
> double foo(double * __restrict__ x, double * __restrict__ y)
> {
>   double res;
>   res = *y + *(y+1);
>   res += *x + *(x+1);
>   return res;
> }
> 
> we generate the constraints (ok)
> 
> RESTRICT.4 = &ANYTHING
> x = &RESTRICT.4
> RESTRICT.5 = &ANYTHING
> y = &RESTRICT.5
> D.1282_3 = y + 64
> D.1285_8 = x + 64
> 
> just like we do for the malloc case, but end up with an extra
> TMT that causes

It either decides to use a TMT, or an NMT, in a loop that looks through
things, partially here:


  /* Collect the list of pointers with a non-empty points to set.  */
  for (i = 1; i < num_ssa_names; i++)
    {
      tree ptr = ssa_name (i);
      struct ptr_info_def *pi;

      if (!ptr
          || !POINTER_TYPE_P (TREE_TYPE (ptr))
          || !SSA_NAME_PTR_INFO (ptr))
        continue;

      pi = SSA_NAME_PTR_INFO (ptr);


      if (pi->pt_anything || !pi->is_dereferenced)
        {
          /* No name tags for pointers that have not been
             dereferenced or point to an arbitrary location.  */
          pi->name_mem_tag = NULL_TREE;
          continue;
        }
and partially in set_pt_anything (which will reset the name tag as
well).

I'd take a look and see what improved-aliasing does with it, and try to
debug the problem there.

I plan on starting to merge the improved aliasing stuff early next week.

--Dan

Reply via email to