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).