I think I resisted the introduction of a movc op originally, but on reflection I think we probably do want one after all; it'd basically give us this for free.
I suspect that there are other similar cases that need to be fixed the same way, in fact. It turns out that the ternary ?: is supposed to be per-component, and I suspect that our lowering passes (int div/mod, float mod) that use hlsl_add_conditional() are also broken for vectors.