https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116611
--- Comment #8 from Robin Dapp <rdapp at gcc dot gnu.org> --- (In reply to Richard Biener from comment #7) > (In reply to Robin Dapp from comment #6) > > Hmm, the RTL follows the gimple code pretty well and those > > vect_array.27[0] = vect__2.17_71; > > become subreg-subreg moves. > > > > vect_array.27 is only dead after the v10 use. > > How should it ideally work? Could we recognize the array move as a > > tuple/struct move and optimize it away? Maybe we're just missing some > > expander for that? But right now we at least do subreg "element" moves. > > I have no idea how register groups usually are set up. Does the > vsseg8e32.v invalidate the register contents? No, it just stores, nothing is invalidated. Generally our vector groups (LMUL) are natural in the sense that they are just different modes with alignment requirements (i.e. starting at a register % group size == 0). The "struct"/lanes/segment stuff is a bit different in that we have "group" sizes of 1-8 but they are not LMUL-like groups (and don't have the alignment requirements). My limited understanding of the "struct" stuff is that it is supposed to fill individual vectors (that make up a group) and operate on them separately as opposed to work on the whole group.