Avoid doing the following combine for vector types:
copysign(x, fp_extend(y)) -> copysign(x, y) copysign(x, fp_round(y)) -> copysign(x, y)
That combine seemed to impede the selection of vector instruction and cause a mess in some circumstances.
This patch was extracted from D70426, which I am abandoning. The patch also refactors the code, for clarity.