This is required to codegen something like:
<vscale x 8 x i16> @llvm.experimental.vector.insert(<vscale x 8 x i16> %vec, <vscale x 2 x i16> %subvec, i64 %idx)
where the output vector is legal, but the input vector needs promoting.
It implements this by performing the whole operation on the promoted type,
and then truncating the result.
I have a bit of distrust for changeVectorElementType. If V0.getValueType() is representable as an MVT, but the promoted type isn't, it will fail. It branches a between an MVT code path and EVT path internally. The MVT path would require an LLVMContext to produce an EVT which it can't get so it will assert.