Architecturally, it's allowed to MVE-I without an FPU, thus -mfpu=none should
not disable MVE-I or moves to/from FP-registers.
This patch removes +/-fpregs from features unconditionally added to target
feature list, depending on FPU and moves the logic to Clang driver, where the
negative form (-fpregs) is conditionally added to the target features list for
the cases of -mfloat-abi=soft, or -mfpu=none without either
+mve or +mve.fp. Only the negative form is added by the driver, the positive
one is derived from other features in the backend.
This confused me on the first three readings – you carefully add -mve.fp, and then test whether +mve.fp is in the list?
It made sense to me on the fourth reading. If I've understood correctly, the point is that if mve.fp was previously enabled, and we have just disabled it, then mve (integer-only) is still required, and hence, so are fpregs. And the same goes if mve itself is enabled in the feature list.
So I think this is right, but I also think it could use a comment spelling out the reasoning.