diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-05-06 07:44:13 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-05-06 07:44:13 +0000 |
commit | 2a3f79973f7ff22ab936b3919c31df5c704e1715 (patch) | |
tree | de837dd67bb2740f66f8671c13d345e57e9d5e7b /gcc/simplify-rtx.c | |
parent | d554bf236e760dec9f9ecf280a8f5523e3ff3aa1 (diff) | |
download | gcc-2a3f79973f7ff22ab936b3919c31df5c704e1715.zip gcc-2a3f79973f7ff22ab936b3919c31df5c704e1715.tar.gz gcc-2a3f79973f7ff22ab936b3919c31df5c704e1715.tar.bz2 |
PR 75964: Invalid integer ABS handling in simplify-rtx.c
RTL has no distinction between signed and unsigned values, so it
doesn't make sense to test for signed overflow.
2017-05-06 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
PR rtl-optimization/75964
* simplify-rtx.c (simplify_const_relational_operation): Remove
invalid handling of comparisons of integer ABS.
gcc/testsuite/
PR rtl-optimization/75964
* gcc.dg/torture/pr75964.c: New test.
From-SVN: r247719
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r-- | gcc/simplify-rtx.c | 28 |
1 files changed, 4 insertions, 24 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index ac85a56..7cab26a 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -5316,34 +5316,14 @@ simplify_const_relational_operation (enum rtx_code code, { case LT: /* Optimize abs(x) < 0.0. */ - if (!HONOR_SNANS (mode) - && (!INTEGRAL_MODE_P (mode) - || (!flag_wrapv && !flag_trapv))) - { - if (INTEGRAL_MODE_P (mode) - && (issue_strict_overflow_warning - (WARN_STRICT_OVERFLOW_CONDITIONAL))) - warning (OPT_Wstrict_overflow, - ("assuming signed overflow does not occur when " - "assuming abs (x) < 0 is false")); - return const0_rtx; - } + if (!INTEGRAL_MODE_P (mode) && !HONOR_SNANS (mode)) + return const0_rtx; break; case GE: /* Optimize abs(x) >= 0.0. */ - if (!HONOR_NANS (mode) - && (!INTEGRAL_MODE_P (mode) - || (!flag_wrapv && !flag_trapv))) - { - if (INTEGRAL_MODE_P (mode) - && (issue_strict_overflow_warning - (WARN_STRICT_OVERFLOW_CONDITIONAL))) - warning (OPT_Wstrict_overflow, - ("assuming signed overflow does not occur when " - "assuming abs (x) >= 0 is true")); - return const_true_rtx; - } + if (!INTEGRAL_MODE_P (mode) && !HONOR_NANS (mode)) + return const_true_rtx; break; case UNGE: |