Add support to the MI matching of vector splats for patterns that
consist of G_CONCAT_VECTORS of smaller splats with the same constant
value. With this, we would consider the following pseudo-MIR to be a splat:
%0 = G_[F]CONSTANT [...] %1 = G_BUILD_VECTOR %0, %0, ..., %0 %2 = G_CONCAT_VECTORS %1, %1, ..., %1
Since it uses recursion for matching splats, it could match pretty
complicated patterns with all sorts of combinations of G_BUILD_VECTOR
and G_CONCAT_VECTORS (e.g. a G_CONCAT_VECTORS with
a G_BUILD_VECTOR_TRUNC and another G_CONCAT_VECTORS as operands),
and it should also look through copies etc.
This should make it easier to match complex immediates for certain
instructions on AMDGPU, where for instance a <8 x s16> will be split
before instruction selection into a G_CONCAT_VECTORS of <2 x s16>
splats.
Could use a case with some undefs in it (undef simple element and undef vector component)