aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-07-09 17:43:44 +0200
committerAldy Hernandez <aldyh@redhat.com>2022-07-09 21:08:10 +0200
commit030a53c613031d11e11fb7b1b08aec1a736da067 (patch)
tree6b7aead121f68f92385655d2d846e55b4057c328 /gcc
parent7a16d39903ed1bf159f7933a19ccae62155b371b (diff)
downloadgcc-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.cc16
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;
}