aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuhongt <hongtao.liu@intel.com>2021-11-08 09:32:17 +0800
committerliuhongt <hongtao.liu@intel.com>2021-11-08 09:34:35 +0800
commita1f7ead09cd41d32e2feffff902eb32e587c36e7 (patch)
treed10f0a792bd886eaa664f6f944d72e46ebd6ef3f
parent2ad1e8081f4797a99a96b513ffe14c7305e9b3d8 (diff)
downloadgcc-a1f7ead09cd41d32e2feffff902eb32e587c36e7.zip
gcc-a1f7ead09cd41d32e2feffff902eb32e587c36e7.tar.gz
gcc-a1f7ead09cd41d32e2feffff902eb32e587c36e7.tar.bz2
Add !HONOR_SNANS to simplifcation: (trunc)copysign((extend)a, (extend)b) to copysign (a, b).
> 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.
-rw-r--r--gcc/match.pd1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/match.pd b/gcc/match.pd
index 869b26d..71cf6f9 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -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))