This patch extends the SelectionDAG's ability to constant-fold vector
arithmetic to include support for SPLAT_VECTOR. This is not only for
scalable-vector types but also for fixed-length vector types, which
helps Hexagon in a couple of cases.
The original RISC-V test case was in fact an infinite DAGCombine loop.
The pattern and (truncate v1), (truncate v2) can be combined to
truncate (and v1, v2) but the truncate can similarly be combined back
to truncate (and v1, v2) (but, crucially, only when one of v1 or
v2 is a constant vector).
It wasn't exposed in on fixed-length types because a TRUNCATE of a
constant BUILD_VECTOR was folded into the BUILD_VECTOR itself, whereas
this did not happen for the equivalent (scalable-vector) SPLAT_VECTOR.
Why don't we need to check that the splat vector operand is constant/undef like we do for build_vector?