This patch updates the transformations in InstCombineVectorOps to use the new shufflevector semantics that say that undefined values in the mask yield poison.
To prevent miscompilations we have to match with m_Poison instead of m_Undef. Otherwise, we might introduce poison where there was previously undef.
I don't understand what is going on in this conditional. Why do we need the undef check here? We already checked above that either the base operand is poison or all elements are present.