Hi, This reverts commit r14-6478-gfda8e2f8292a90 "range: Workaround different type precision between _Float128 and long double [PR112788]" as the fixes for PR112993 make all 128 bits scalar floating point have the same 128 bit precision, this workaround isn't needed any more.
Bootstrapped and regress-tested on: - powerpc64-linux-gnu P8/P9 (with ibm128 by default) - powerpc64le-linux-gnu P9/P10 (with ibm128 by default) - powerpc64le-linux-gnu P9 (with ieee128 by default) Is it OK for trunk if {1,2}/4 in this series get landed? BR, Kewen ----- PR target/112993 gcc/ChangeLog: * value-range.h (range_compatible_p): Remove the workaround on different type precision between _Float128 and long double. --- gcc/value-range.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/gcc/value-range.h b/gcc/value-range.h index 9531df56988..39de7daf3d9 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -1558,13 +1558,7 @@ range_compatible_p (tree type1, tree type2) // types_compatible_p requires conversion in both directions to be useless. // GIMPLE only requires a cast one way in order to be compatible. // Ranges really only need the sign and precision to be the same. - return TYPE_SIGN (type1) == TYPE_SIGN (type2) - && (TYPE_PRECISION (type1) == TYPE_PRECISION (type2) - // FIXME: As PR112788 shows, for now on rs6000 _Float128 has - // type precision 128 while long double has type precision 127 - // but both have the same mode so their precision is actually - // the same, workaround it temporarily. - || (SCALAR_FLOAT_TYPE_P (type1) - && TYPE_MODE (type1) == TYPE_MODE (type2))); + return (TYPE_PRECISION (type1) == TYPE_PRECISION (type2) + && TYPE_SIGN (type1) == TYPE_SIGN (type2)); } #endif // GCC_VALUE_RANGE_H -- 2.39.1