[Bug target/84077] [7/8 Regression] Likely wrong code with `__builtin_expect()` on i686-linux-gnu

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Feb 9 22:04:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84077

--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem goes away even in the original unmodified dcp.ii with -msse2
-mfpmath=sse or with -ffloat-store, which means most likely the source just
relies on excess precision not happening.
If so, this is a dup of PR323.  To make i?86 32-bit code use no excess
precision in float and double, one needs to use -msse2 -mfpmath=sse, or to get
rid of it in most cases while paying in performance -ffloat-store, otherwise
some computations can be done in the 80-bit precision and rounding can happen
whenever something needs to be forced out of the i387 floating point stack.
Instead of -ffloat-store, you could also insert optimization barriers in
certain spots (e.g. using inline asm and for FLT_EVAL_METHOD non-zero only)
where you really require rounding to float or double rather than allowing
excess precision.

In any case, most likely not a bug on the GCC side.


More information about the Gcc-bugs mailing list