aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@nextmovesoftware.com>2020-08-03 13:15:58 +0100
committerRoger Sayle <roger@nextmovesoftware.com>2020-08-03 13:15:58 +0100
commit919c9d4bd3db7da09061af3b6f2a9193bf7bae45 (patch)
treeb706d143612fce480a37f2cab09f6c426d9da51c /gcc
parentef59e1fb372c91c882784392b98c44a8550ff455 (diff)
downloadgcc-919c9d4bd3db7da09061af3b6f2a9193bf7bae45.zip
gcc-919c9d4bd3db7da09061af3b6f2a9193bf7bae45.tar.gz
gcc-919c9d4bd3db7da09061af3b6f2a9193bf7bae45.tar.bz2
PR rtl-optimization 61494: Preserve x-0.0 with HONOR_SNANS.
The following patch avoids simplifying x-0.0 to x when -fsignaling-nans is specified, which resolves PR rtl-optimization 61494. Indeed, running the test program attached to that PR now reports no failures. 2020-08-02 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR rtl-optimization/61494 * simplify-rtx.c (simplify_binary_operation_1) [MINUS]: Don't simplify x - 0.0 with -fsignaling-nans.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/simplify-rtx.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index d221168..4f0652f 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -2678,11 +2678,12 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
&& !contains_symbolic_reference_p (op1))
return simplify_gen_unary (NOT, mode, op1, mode);
- /* Subtracting 0 has no effect unless the mode has signed zeros
- and supports rounding towards -infinity. In such a case,
- 0 - 0 is -0. */
+ /* Subtracting 0 has no effect unless the mode has signalling NaNs,
+ or has signed zeros and supports rounding towards -infinity.
+ In such a case, 0 - 0 is -0. */
if (!(HONOR_SIGNED_ZEROS (mode)
&& HONOR_SIGN_DEPENDENT_ROUNDING (mode))
+ && !HONOR_SNANS (mode)
&& trueop1 == CONST0_RTX (mode))
return op0;