diff options
author | Roger Sayle <roger@nextmovesoftware.com> | 2020-08-03 13:15:58 +0100 |
---|---|---|
committer | Roger Sayle <roger@nextmovesoftware.com> | 2020-08-03 13:15:58 +0100 |
commit | 919c9d4bd3db7da09061af3b6f2a9193bf7bae45 (patch) | |
tree | b706d143612fce480a37f2cab09f6c426d9da51c | |
parent | ef59e1fb372c91c882784392b98c44a8550ff455 (diff) | |
download | gcc-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.
-rw-r--r-- | gcc/simplify-rtx.c | 7 |
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; |