[LLVMdev] [RFC] Extend LLVM IR to express "fast-math" at a per-instruction level

Michael Ilseman milseman at apple.com
Tue Oct 30 09:36:38 PDT 2012

On Oct 30, 2012, at 1:46 AM, Duncan Sands <baldrick at free.fr> wrote:

> Hi Michael,
>> Flags
>> ---
>> no NaNs (N)
>>   - ignore the existence of NaNs when convenient
>> no Infs (I)
>>   - ignore the existence of Infs when convenient
>> no signed zeros (S)
>>   - ignore the existence of negative zero when convenient
> while the above flags make perfect sense for me, the other two seem more
> dubious:
>> allow fusion (F)
>>   - fuse FP operations when convenient, despite possible differences in rounding
>>     (e.g. form FMAs)
>> unsafe algebra (A)
>>   - allow for algebraically equivalent transformations that may dramatically
>>     change results in floating point. (e.g. reassociation)
> They don't seem to be capturing a clear concept, they seem more like a grab-bag
> of "everything else" (A) or "here's a random thing that is important today so
> let's have a flag for it" (F).

'A' is certainly a bit of a grab-bag, but I had difficulty breaking it apart into finer-grained pieces that a user would want to pick and choose between. I'd be interested in any suggestions you might have along these lines.

Why is 'F' such a random flag to have? 'F' implies ignoring intermediate rounding when a more efficient version exists, and it seems fair for it to be its own category.

> ...
>> Why not use metadata rather than flags?
>> There is existing metadata to denote precisions, and this proposal is orthogonal
>> to those efforts. These flags are analogous to nsw/nuw, and are inherent
>> properties of the IR instructions themselves that all transformations should
>> respect.
> If you drop any of these flags then things are still conservatively correct,
> just like with metadata.  In my opinion this could be implemented as metadata.
> (I'm not saying it should be represented as metadata, I'm saying it could be).
> Disadvantages of metadata:
> - Bloats the IR (however my measurements suggest this is by < 2% for math heavy
> code)
> - More painful to work with (though helper classes can mitigate this)
> - Less efficient to modify (but will flags be cleared that often)?
> Disadvantages of using subclass data bits:
> - Can only represent flags.  Thus you might end up with a mix of flags and
> metadata for floating point math, with the metadata holding the non-flag
> info, and subclass data holding the flags.  In which case it might be better
> to just have it all be metadata in the first place
> - Only a limited number of bits (but hey)
> Hopefully Chris will weigh in with his opinion.
> Ciao, Duncan.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Thanks for the feedback!

More information about the llvm-dev mailing list