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

rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |rsandifo at gcc dot gnu.org
           Assignee|unassigned at gcc dot gnu.org      |rsandifo at gcc dot 
gnu.org

--- Comment #7 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
Here's another reproducer (compile at -O):

typedef double v2df __attribute__((vector_size(16)));

#define N 4096
void consume (void *);
v2df
foo (void)
{
  double x[N+2];
  consume (x);
  return (v2df) { x[N], x[N + 1] };
}

The x[N] address is valid for V2DF but not DF.

I think there's also a latent problem with the way that aarch64 handles
paired memory accesses in general.  Even if the rtx_equal_p conditions
are separated by the right constant amount before RA, there's no guarantee
that they'll remain that way after RA, since the two addresses can be
reloaded differently.  We just get lucky that nothing rechecks the
rtx_equal_p condition after RA (even though in principle any post-RA
pass would be entitled to assume that the condition is true).

Reply via email to