This patch legalizes ISD::SPLAT_VECTOR to enable the generic DAG
combines that create splat_vector nodes. This simplifies some ISel
patterns, although ISD::isBuildVectorAllOnes has to be extended to
recognize splat_vectors to keep the vnot pattern fragment working.
The AddedComplexity for splats is also removed so that we no longer
prefer constant splats over v128.const instructions. This is
consistent with the instruction preferences used in BUILD_VECTOR
lowering and reduces the instruction count in many tests.
There is a small regression in that insert_vector_elts into undef
vectors at constant indices that could previously have been turned
into swizzles can no longer be simplified that way because those nodes
are combined to splat_vector nodes instead of BUILD_VECTOR nodes. This
change includes a custom target combine meant to fix this, but
unfortunately the generic combine gets precedence over the custom
combine. Fixing this is left as future work, and the custom combine is
kept because it is still useful in the non-constant index case. See
@swizzle_one_i8x16 and @swizzle_one_var_i8x16 in simd-build-vector.ll
The motivation for this change is that follow-on patches will
introduce new combines that will greatly improve codegen for splatted
vector shift values but rely on splats having no undef lanes. Unlike a
splatting build_vector, a splat_vector node never has undef lanes.