[LLVMdev] Float undef value propagation
Dan Gohman
dan433584 at gmail.com
Mon Dec 16 13:19:54 PST 2013
On Sun, Dec 15, 2013 at 5:12 PM, Philip Reames <listmail at philipreames.com>wrote:
> On 12/14/2013 05:18 PM, Dan Gohman wrote:
>
>> On Thu, Dec 12, 2013 at 5:43 PM, Owen Anderson <resistor at mac.com
>> <mailto:resistor at mac.com>> wrote:
>>
>>
>> On Dec 12, 2013, at 4:57 PM, Philip Reames
>> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>>
>> undef + any == NaN (since undef can be NaN) or undef + any (since
>>> undef could be zero)
>>>
>>
>> undef + non-NaN is still undef. The compiler is free to choose any
>> value of the type it wishes when simplifying an undef expression.
>> The important point is that it still has to be a value /of that
>> type. /Hence, predicates that are true for /any/ choice of value
>>
>> must still be respected. This is the case for NaN + undef == NaN:
>> while the compiler is free to choose any value for the undef, there
>> is no such value for which the result is not NaN.
>>
>>
>> undef + non-NaN is not undef. This is because while you can pick any
>> value for the original undef, if you leave an undef behind, you can't
>> control what someone else might pick for it. There are floating-point
>> values which cannot be the result of undef + non-NaN for many values of
>> non-NaN, so the result of undef + non-Nan is not an unconstrained undef.
>>
> This is a very good point. Does this mean that the only valid
> transformations of "undef + Constant" are "Constant" (by undef == 0) or
> "NaN" (by undef == NaN)? Or are there known easily describible subsets of
> Constants which allow a more general transform?
>
> As an example, when Constant == 0, it would appear that propagating the
> undef is fine. (I think.) Are there other cases like this? Or am I wrong
> about the legality of this example?
-0.0 is never the result of adding 0.0 to something, so even that isn't
safe (outside of -ffast-math mode)
Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131216/81d2ea7b/attachment.html>
More information about the llvm-dev
mailing list