https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106069
--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #17) > Seeing > > Trying 21 -> 24: > 21: r150:V4SI=vec_select(vec_concat(r146:V4SI,r141:V4SI),parallel) > REG_DEAD r146:V4SI > REG_DEAD r141:V4SI > 24: {r151:SI=vec_select(r150:V4SI,parallel);clobber scratch;} > ... > Successfully matched this instruction: > (set (reg:SI 151) > (vec_select:SI (reg:V4SI 141) > (parallel [ > (const_int 3 [0x3]) > ]))) > > shouldn't that be (vec_select:SI (reg:V4SI 146) ...)? Or does > (vec_concat:V8SI (xx:V4SI xx:V4SI)) magically swap the two V4SI vectors? Ah, no, the combination looks correct to me. After all the select in 21 interleaves the two inputs.