[X86] Teach FCOPYSIGN lowering to recognize constant magnitudes.
For code like:
float foo(float x) { return copysign(1.0, x); }
We used to generate:
andps <-0.
000000e+00,0,0,0>, %xmm0
movss <1.
000000e+00>, %xmm1
andps <nan>, %xmm1
orps %xmm0, %xmm1
Basically doing an abs(1.0f) in the two middle instructions.
We now generate:
andps <-0.
000000e+00,0,0,0>, %xmm0
orps <1.
000000e+00,0,0,0>, %xmm0
Builds on cleanups r223415, r223542.
rdar://
19049548
Differential Revision: http://reviews.llvm.org/D6555
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225357
91177308-0d34-0410-b5e6-
96231b3b80d8