[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