diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2023-05-23 12:34:45 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2023-05-23 14:56:13 +0200 |
commit | 8d5f050dabbf6dd3b992c3b46661848dbcf30d9e (patch) | |
tree | a52fb02ae076bdf29c63729eec7fe04e48a18c99 /gcc/value-range.cc | |
parent | 0b4ae6e1ec8d71ab0dd1612999bb78108d56f4c2 (diff) | |
download | gcc-8d5f050dabbf6dd3b992c3b46661848dbcf30d9e.zip gcc-8d5f050dabbf6dd3b992c3b46661848dbcf30d9e.tar.gz gcc-8d5f050dabbf6dd3b992c3b46661848dbcf30d9e.tar.bz2 |
Remove buggy special case in irange::invert [PR109934].
This patch removes a buggy special case in irange::invert which seems
to have been broken for a while, and probably never triggered because
the legacy code was handled elsewhere, and the non-legacy code was
using an int_range_max of int_range<255> which made it extremely
likely for num_ranges == 255. However, with auto-resizing ranges,
int_range_max will start off at 3 and can hit this bogus code in the
unswitching code.
PR tree-optimization/109934
gcc/ChangeLog:
* value-range.cc (irange::invert): Remove buggy special case.
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/pr109934.c: New test.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r-- | gcc/value-range.cc | 8 |
1 files changed, 0 insertions, 8 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 45b1e65..874a184 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -1650,14 +1650,6 @@ irange::invert () wide_int type_min = wi::min_value (prec, sign); wide_int type_max = wi::max_value (prec, sign); m_nonzero_mask = wi::minus_one (prec); - if (m_num_ranges == m_max_ranges - && lower_bound () != type_min - && upper_bound () != type_max) - { - m_base[1] = type_max; - m_num_ranges = 1; - return; - } // At this point, we need one extra sub-range to represent the // inverse. |