This in an extension to the code added in D123911 which added vector combine folding of shuffle-select patterns, attempting to reduce the total amount of shuffling required in patterns like:
%x = shuffle %i1, %i2 %y = shuffle %i1, %i2 %a = binop %x, %y %b = binop %x, %y shuffle %a, %b, selectmask
This patch extends the handing of shuffles that are dependent on one another, which can arise from the SLP vectorizer, as-in:
%x = shuffle %i1, %i2 %y = shuffle %x
The input shuffles can also be emitted, in which case they are treated like identity shuffles. This patch also attempts to calculate a better ordering of input shuffles, which can help getting lower cost input shuffles, pushing complex shuffles further down the tree.
Do you think it would be worth making an anonymous function for this similar behaviour?