Given this:
%x:_(<n x sK>) = G_BUILD_VECTOR %lane, ... ... %y:_(<n x sK>) = G_SHUFFLE_VECTOR %x(<n x sK>), %foo, shufflemask(0, 0, ...)
We can produce:
%y:_(<n x sK) = G_DUP %lane(sK)
Doesn't seem to be too common, but AArch64ISelLowering attempts to do this before trying to produce a DUPLANE. Might as well port it.
Factor out the other G_DUP pattern into a helper function, and create a helper for this pattern.
Also make it so that when the splat has an undef mask, we try setting it to 0. SDAG does this, and it makes sure that when we get the build vector operand, we actually get a source operand.
misleading whitespace change.