]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add !HONOR_SNANS to simplifcation: (trunc)copysign((extend)a, (extend)b) to copysign...
authorliuhongt <hongtao.liu@intel.com>
Mon, 8 Nov 2021 01:32:17 +0000 (09:32 +0800)
committerliuhongt <hongtao.liu@intel.com>
Mon, 8 Nov 2021 01:34:35 +0000 (09:34 +0800)
> Note that this is not safe with -fsignaling-nans, so needs to be disabled
> for that option (if there isn't already logic somewhere with that effect),
> because the extend will convert a signaling NaN to quiet (raising
> "invalid"), but copysign won't, so this transformation could result in a
> signaling NaN being wrongly returned when the original code would never
> have returned a signaling NaN.
>
> --
> Joseph S. Myers
> joseph@codesourcery.com

gcc/ChangeLog

PR target/102464
* match.pd (Simplifcation (trunc)copysign((extend)a, (extend)b)
to .COPYSIGN (a, b)): Add !HONOR_SNANS.

gcc/match.pd

index 869b26d16a0cd4e71f8b7bf3daf439445521479a..71cf6f9df0acdb8eec7147b5942cf28e31d7f0c5 100644 (file)
@@ -6210,6 +6210,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
  (simplify
   (convert (copysigns (convert@2 @0) (convert @1)))
    (if (optimize
+       && !HONOR_SNANS (@2)
        && types_match (type, TREE_TYPE (@0))
        && types_match (type, TREE_TYPE (@1))
        && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@2))