[llvm-commits] [llvm] r171793 - in /llvm/trunk: lib/Transforms/InstCombine/InstCombine.h lib/Transforms/InstCombine/InstCombineMulDivRem.cpp test/Transforms/InstCombine/fast-math.ll

Shuxin Yang shuxin.llvm at gmail.com
Mon Jan 7 14:18:54 PST 2013


Hi, Stephen:

   Thank you so much for your feedback and expertise.  I will fix this 
problem along with other enhancement
to fmul.

Thanks
Shuixn


On 1/7/13 1:54 PM, Stephen Canon wrote:
> On Jan 7, 2013, at 4:39 PM, Shuxin Yang <shuxin.llvm at gmail.com> wrote:
>
>> Author: shuxin_yang
>> Date: Mon Jan  7 15:39:23 2013
>> New Revision: 171793
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=171793&view=rev
>> Log:
>> This change is to implement following rules:
>>
>>   o. X/C1 * C2 => X * (C2/C1) (if C2/C1 is neither special FP nor denormal)
>>   o. X/C1 * C2 -> X/(C1/C2)   (if C2/C1 is either specical FP or denormal, but C1/C2 is a normal Fp)
> We should be able to avoid the divide by instead transforming this to (X * (SCALE^-1 * C2/C1)) * SCALE, where SCALE is a constant of the form 2^n chosen such that (SCALE^-1 * C2/C1) is a normal FP number.  On nearly all modern architectures two multiplies are cheaper than a divide, and this will cover a much larger set of cases for which C2/C1 is not representable.
>
> - Steve




More information about the llvm-commits mailing list