diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-07-09 17:43:44 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-07-09 21:08:10 +0200 |
commit | 030a53c613031d11e11fb7b1b08aec1a736da067 (patch) | |
tree | 6b7aead121f68f92385655d2d846e55b4057c328 /gcc | |
parent | 7a16d39903ed1bf159f7933a19ccae62155b371b (diff) | |
download | gcc-030a53c613031d11e11fb7b1b08aec1a736da067.zip gcc-030a53c613031d11e11fb7b1b08aec1a736da067.tar.gz gcc-030a53c613031d11e11fb7b1b08aec1a736da067.tar.bz2 |
Set VR_VARYING in irange::irange_single_pair_union.
The fast union operation is sometimes setting a range of the entire
domain, but leaving the kind bit as VR_RANGE instead of downgrading it
to VR_VARYING.
Tested on x86-64 Linux.
gcc/ChangeLog:
* value-range.cc (irange::irange_single_pair_union): Set
VR_VARYING when appropriate.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/value-range.cc | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 25f1acf..fd549b9 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -1777,11 +1777,7 @@ irange::irange_single_pair_union (const irange &r) // Check for overlap/touching ranges, or single target range. if (m_max_ranges == 1 || wi::to_widest (m_base[1]) + 1 >= wi::to_widest (r.m_base[0])) - { - m_base[1] = r.m_base[1]; - if (varying_compatible_p ()) - m_kind = VR_VARYING; - } + m_base[1] = r.m_base[1]; else { // This is a dual range result. @@ -1789,8 +1785,8 @@ irange::irange_single_pair_union (const irange &r) m_base[3] = r.m_base[1]; m_num_ranges = 2; } - if (flag_checking) - verify_range (); + if (varying_compatible_p ()) + m_kind = VR_VARYING; return true; } @@ -1817,8 +1813,8 @@ irange::irange_single_pair_union (const irange &r) m_base[3] = m_base[1]; m_base[1] = r.m_base[1]; } - if (flag_checking) - verify_range (); + if (varying_compatible_p ()) + m_kind = VR_VARYING; return true; } @@ -1857,6 +1853,8 @@ irange::irange_union (const irange &r) { bool ret = irange_single_pair_union (r); set_nonzero_bits (saved_nz); + if (flag_checking) + verify_range (); return ret || ret_nz; } |