https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61338
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- One way to solve this would be push the perm that covers the whole vector (that is an 1-1/onto PERM) forward through binary ops. That is PERM<a,c> + PERM<b,c> -> PERM <a+b, c> (where c matches all elements of the vector as that will remove one perm always anyways. And then in the end we up with PERM<PERM<x, c>, c`> which is just x. I don't know if this should be its own pass or just matching in match.