------- Comment #23 from rguenth at gcc dot gnu dot org  2008-11-21 11:09 
-------
We actually usually never ask for the alias set of an indirect reference, but
instead we seem to use the pointed-to type instead which doesn't inherit the
restrict handling.  Otherwise we would miscompile even the trivial

int foo (int *__restrict p)
{
  int *__restrict q;
  int v;
  q = p + 1;
  q = q - 1;
  v = *q;
  *p = 1;
  return v + *q;
}
extern void abort (void);
int main()
{
  int i = 0;
  if (foo (&i) != 1)
    abort ();
  return 0;
}

because q is not based on the restrict p and both pointers would get
distinct alias-sets which you can verify by calling get_alias_set on
the indirect-refs.

So one way to fix the issue in the vectorizer is to avoid calling
get_alias_set on the indirect-refs as well.  Or to rip out all the
broken restrict handling from the compiler.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37742

Reply via email to