https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97194
--- Comment #9 from Alexander Monakov <amonakov at gcc dot gnu.org> --- (In reply to Richard Biener from comment #8) > Note that currently RTL expansion forces a local vector typed variable > to the stack (instead of allocating a pseudo) when there are > variable-index accesses to it. That might be a reason to also handle > slightly "expensive" extract cases. But I guess later falling back > to a stack slot via a splitter or LRA will lead to worse code. Indeed, but I struggle to see a good reason to bind the entire lifetime of a variable to memory just because one operation requires that. Cannot GCC instead create a fresh temporary early at RTL-expand (not split) time for each extract operation, letting the original variable live in a pseudo, and binding only that short-lived temporary to memory? It can result in extra copies if the temporary needs to be loaded from memory anyway, but I think passes like RTL CSE should be able to propagate them.