https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100866
--- Comment #14 from Segher Boessenkool <segher at gcc dot gnu.org> --- (In reply to luoxhu from comment #13) > It is not visible in combine due to the constant data is in *.LC0 and combine can see things in the constant pool in various ways though (just like many other parts of the compiler). But yeah, unspecs are a big hurdle to optimisation always. If we would express this as some "real" RTL we would need a few variants: one that takes only one register as data input and another that takes two; one that has all permutation indices in range and another that masks them; and maybe a few more.