On Tue, 4 Nov 2014, Joseph Myers wrote: > On Tue, 4 Nov 2014, Richard Biener wrote: > > > c-family/ > > * c-common.c (shorten_compare): Do not shorten mixed > > DFP and non-DFP compares. > > OK. I think it's also wrong for get_narrower to strip conversions between > binary and decimal floating point at all, as all such conversions for > supported pairs of types can change values. (_Decimal128 can represent > all values of __fp16, but no target currently supports both types.) And > if flag_signaling_nans (strictly, if HONOR_SNANS (source-mode)), no > floating-point conversions should be stripped in get_narrower at all. And > even without signaling NaNs, TYPE_PRECISION may not be a reliable > indication of whether a conversion is widening - the only issue applying > at present might be the corner case that a conversion of a subnormal from > __float80 to __float128 is exact but still raises "underflow" if traps on > underflow are enabled, but when you have both binary128 and IBM long > double supported together then neither has a set of values that is a > superset of the other (it seems > <https://gcc.gnu.org/ml/gcc-patches/2014-07/msg01086.html> misses > get_narrower in the places that need addressing).
>From this and past issues it looks like most (if not all) conversions between FP types use CONVERT_EXPR, not NOP_EXPR and thus may work "as expected" here. That's of course somewhat unreliable as the middle-end happily uses NOP_EXPR for those. Richard.