This issue was found in D73711.
We'll also need separate changes to CodeGen wrt splat_vectors. There are some incorrect uses of scalable build_vectors (int and fp) scattered there. This is obvious when an assert to check for scalable build_vectors is added to DAG.getNode(...).
Notice the TODO in the f16 immediate splat tests. There seems to be a missing lowering for f16 constants. Instead of becoming ConstantFPs, the f16 constants are being explicitly loaded from the constant pool. Does anyone know where the special f16 constant lowerings live? I don't have a lot of experience with those.
I think setOperationAction(ISD::ConstantFP, MVT::f16, Legal) is going to cause a fatal error for some FP constants. Not that they would be impossible to lower appropriately, but I don't think we have the necessary patterns.