[PATCH] [X86] Teach FCOPYSIGN lowering to recognize constant magnitudes.

Ahmed Bougacha ahmed.bougacha at gmail.com
Fri Dec 5 17:58:21 PST 2014


On Fri, Dec 5, 2014 at 5:48 PM, Owen Anderson <resistor at mac.com> wrote:
> Should this be target independent?

I don't think so, it's only after the copysign was expanded to bitwise
ops that the constant folding is exposed.
If the expansion happened earlier, other generic combines will do the
optimization.

- Ahmed

> —Owen
>
>> On Dec 5, 2014, at 3:15 PM, Ahmed Bougacha <ahmed.bougacha at gmail.com> wrote:
>>
>> 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
>>
>> http://reviews.llvm.org/D6555
>>
>> Files:
>>  lib/Target/X86/X86ISelLowering.cpp
>>  test/CodeGen/X86/copysign-constant-magnitude.ll
>>  test/CodeGen/X86/copysign-zero.ll
>> <D6555.17003.patch>_______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list