diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-02-01 09:44:23 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-02-01 09:44:23 +0100 |
commit | 1651b09414923fd441adcc66902bdc52372ccb36 (patch) | |
tree | c2e9b408f3b29c2c682ed9666c7e8b10ec15bb6a /gcc/tree-vrp.c | |
parent | ac33bce89cdab0c0c43edec60b98a1fccdf3bd4b (diff) | |
download | gcc-1651b09414923fd441adcc66902bdc52372ccb36.zip gcc-1651b09414923fd441adcc66902bdc52372ccb36.tar.gz gcc-1651b09414923fd441adcc66902bdc52372ccb36.tar.bz2 |
re PR tree-optimization/89143 (comparison of abs(i) against excessive constant less than UXXX_MAX no longer folded)
PR tree-optimization/89143
* wide-int-range.h (wide_int_range_absu): Declare.
* wide-int-range.cc (wide_int_range_absu): New function.
* tree-vrp.c (extract_range_from_unary_expr): Handle ABSU_EXPR.
* gcc.dg/tree-ssa/vrp121.c: New test.
From-SVN: r268445
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 8d18e19..bde0751 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -2196,6 +2196,16 @@ extract_range_from_unary_expr (value_range_base *vr, vr->set_varying (); return; } + else if (code == ABSU_EXPR) + { + wide_int wmin, wmax; + wide_int vr0_min, vr0_max; + extract_range_into_wide_ints (&vr0, SIGNED, prec, vr0_min, vr0_max); + wide_int_range_absu (wmin, wmax, prec, vr0_min, vr0_max); + vr->set (VR_RANGE, wide_int_to_tree (type, wmin), + wide_int_to_tree (type, wmax)); + return; + } /* For unhandled operations fall back to varying. */ vr->set_varying (); |