[llvm-dev] undef * 0
Manuel Jacob via llvm-dev
llvm-dev at lists.llvm.org
Mon Sep 12 05:01:55 PDT 2016
I think you're looking at "undef" the wrong way. "Undef" is not a
value, "undef" is a placeholder where the compiler can choose an
arbitrary value at every occurence of "undef".
You could choose different values for "undef" in your example, so the
law of distribution holds:
undef * (1 - 1) ~> undef * 1 + undef * (-1) ~> 0 * 1 + 0 * (-1) ~> 0 + 0
= 0
or even
undef * (1 - 1) ~> undef * 1 + undef * (-1) ~> undef + undef ~> undef
(same as yours so far) ~> 0
Here's a blog post which describes "undef" in more detail, also
describing a case where it inhibits optimization:
http://www.playingwithpointers.com/problem-with-undef.html
On 2016-09-12 09:36, Soham Chakraborty via llvm-dev wrote:
> Hi,
>
> Back to the original question - undef * 0 = 0 may have some issues.
>
> Consider the evaluation of the expression undef * (1 - 1)
>
> (1) undef * (1 - 1) ~> undef * 0 ~> 0 (as suggested)
>
> (2) undef * (1 - 1) ~> undef * 1 + undef * (-1) ~> undef + undef ~>
> undef
> and now the evaluation of undef can be some other value than 0.
>
> Thus it does not follow the law of distribution of multiplication over
> addition property and the algebraic transformations are ambiguous.
>
> Similarly associativity of boolean algebra is also violated as follows:
>
> undef & a & !a
> (1) ~> (undef & a) & !a ~> undef & !a ~> undef
> (2) ~> undef (a & !a) ~> undef & 0 ~> 0
>
> Is there any clear set of rules how LLVM handles such cases?
>
> Best Regards,
> soham
>
>
>> I don't know of a way to do it from the command-line, but if you're
>> willing
>> to change the IR, you can add the optsize (for -Os) or minsize (for
>> -Oz)
>> IR
>> attribute to the function you're compiling.
>>
>> On Fri, Sep 2, 2016 at 5:59 AM, Bruce Hoult via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> Idle question, if anyone is reading still ... how do you get llc to
>>> do
>>> -Os
>>> or -Oz? The docs say the argument must be an integer, and anything
>>> other
>>> than 0..3 is rejected. (in fact .. bug report ... 10 thru 39 are also
>>> silently accepted as are 100 thru 399 etc)
>>>
>>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list