[LLVMdev] folding x * 0 = 0

Javier Martinez javier at jmartinez.org
Thu Mar 4 19:31:10 PST 2010


Hi Jochen,

I just wanted to point out that if x = inf the result of x * 0 is in 
indeterminate form so reducing it to zero would give the wrong result in 
that case.

Thanks,
Javier

On 3/3/2010 8:56 AM, Jochen Wilhelmy wrote:
> Hi!
>
>
>    
>> sin/cos etc should already be handled by lib/Analysis/ConstantFolding.cpp.
>>
>>      
> Thanks for the hint and it works!
> Now I have a new Problem:
>
> I have this function:
>
> float foo(float a, float b)
> {
>       float x = a * b * 0.0f;
>       return cos(0.5) * sin(0.5) * x;
> };
>
> after compiling it with clang (cpp mode) and renaming _ZSt3sinf to sin
> and _ZSt3cosf to cos I get the following:
>
> define float @_Z3fooff(float %a, float %b) nounwind {
> entry:
>     %mul = fmul float %a, %b                        ;<float>  [#uses=1]
>     %mul2 = fmul float %mul, 0.000000e+000          ;<float>  [#uses=1]
>     %mul6 = fmul float 0x3FDAED54A0000000, %mul2    ;<float>  [#uses=1]
>     ret float %mul6
> }
>
> the sin and cos calls are folded, but not the mul by zero.
> May be this is missing in llvm::ConstantFoldInstOperands in
> ConsantFolding.cpp?
>
> I would expect the following optimizations, but didn't find them in the
> code:
> x  + 0 = x
> x * 0 = 0
> x * 1 = 1
> x * -1 = -x
>
> -Jochen
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>    



More information about the llvm-dev mailing list