https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104162

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Btw, in VN it would be nice to handle

struct S { int i; };

int i;
int bar (char *p)
{
  char *q = p + 1;
  i = 1;
  char *r = (char *)&(((struct S *)&p[i])->i);
  return q == r;
}

the main issue here is that this is vn_reference vs. vn_nary handling and this
transitions from vn_reference to possibly vn_nary with valueization.  For VN
&MEM[p + 1] was more canonical and we could go back to this when seeing
pointer-plus -- at least when lookup & simplification does not produce a
redundancy.

Handling this in VN only and only when inlining is complete might also avoid
regressing the testcase again.

Reply via email to