The previous behavior was tantamount to saying LangOpts.NativeHalfType was implied by LangOpts.HalfArgsAndReturns, which AFAICT isn't true, especially given the latter is enabled by default on AArch64.
Instead, teach the various parts of CodeGen that already know about half (using the intrinsics or not) about the weird in-between case, where the "half" type is legal, but any operation on it (other than conversion from/to float and storage) isn't.
This is a smaller intermediate step to the end-goal of removing the intrinsic, always using "half", and letting the backend do the legalization.
Depends on D4602.
-Ahmed