From 8d5f050dabbf6dd3b992c3b46661848dbcf30d9e Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Tue, 23 May 2023 12:34:45 +0200 Subject: 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. --- gcc/value-range.cc | 8 -------- 1 file changed, 8 deletions(-) (limited to 'gcc/value-range.cc') 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. -- cgit v1.1