mibintc added inline comments.

================
Comment at: clang/docs/UsersManual.rst:1318
+   mode informs the compiler that it must not assume any particular
+   rounding mode.
+
----------------
rjmccall wrote:
> rjmccall wrote:
> > "represent *the* corresponding IEEE rounding rules"
> A few points about this documentation that occurred to me since the last time 
> I looked at it:
> 
> - It's weird to talk about LLVM here, since this is the Clang documentation.  
> Clang's behavior is not specified in terms of the IR it generates; it's 
> specified in terms of the formal behavior of the source code.  Therefore this 
> documentation should talk about things using concepts from an appropriate 
> language standard whenever possible; in this case, C99 works.
> 
> - It's weird to bring up all these different rounding modes when this option 
> doesn't actually let you do anything with them.  If you want to talk about 
> rounding modes in general that's fine as a way of informing the programmer, 
> but we shouldn't give them information they can't use.
> 
> - I don't think `-fno-rounding-math` is actually equivalent to forcing the 
> use of the `tonearest` rounding mode; I think it *assumes* that the rounding 
> mode is set to `tonearest`.  (Or am I wrong and this is actually guaranteed 
> by ABI?)
> 
> - I don't think we want to *define* `-frounding-math` as exactly equivalent 
> to `-ffp-model=strict`.  That might be a convenient implementation for now, 
> but it seems to me that `-frounding-math` still allows some optimizations 
> that `-ffp-model=strict` wouldn't.
> 
> With that in mind, I'd suggest something like this:
> 
> > Force floating-point operations to honor the dynamically-set rounding mode 
> > by default.
> >
> > The result of a floating-point operation often cannot be exactly 
> > represented in the result type and therefore must be rounded.  IEEE 754 
> > describes different rounding modes that control how to perform this 
> > rounding, not all of which are supported by all implementations.  C 
> > provides interfaces (``fesetround`` and ``fesetenv``) for dynamically 
> > controlling the rounding mode, and while it also recommends certain 
> > conventions for changing the rounding mode, these conventions are not 
> > typically enforced in the ABI.  Since the rounding mode changes the 
> > numerical result of operations, the compiler must understand something 
> > about it in order to optimize floating point operations.
> >
> > Note that floating-point operations performed as part of constant 
> > initialization are formally performed prior to the start of the program and 
> > are therefore not subject to the current rounding mode.  This includes the 
> > initialization of global variables and local ``static`` variables.  
> > Floating-point operations in these contexts will be rounded using 
> > ``FE_TONEAREST``.
> >
> > - The option ``-fno-rounding-math`` allows the compiler to assume that the 
> > rounding mode is set to ``FE_TONEAREST``.  This is the default.
> > - The option ``-frounding-math`` forces the compiler to honor the 
> > dynamically-set rounding mode.  This prevents optimizations which might 
> > affect results if the rounding mode changes or is different from the 
> > default; for example, it prevents floating-point operations from being 
> > reordered across most calls and prevents constant-folding when the result 
> > is not exactly representable.
Thank you, I will work on another patch 


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62731/new/

https://reviews.llvm.org/D62731



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to