We already do:
concat_vectors(scalar, undef) -> scalar_to_vector(scalar)
When the scalar is legal. When it's not, but is a truncated legal scalar, we can also do:
concat_vectors(trunc(scalar), undef) -> scalar_to_vector(scalar)
Which is equivalent, since the upper lanes are undef anyway.
To achieve that, we need to teach the original combine to look at multiple UNDEF operands, not just 1. I can't think of a case where than happens in isolation, so let's consider it part of this combine.