On 7/2/19 5:36 PM, Jeff Law wrote:
I don't see anything inherently concerning here. I do wonder if there's
any value in having a debugging function in the class that would iterate
over the ranges and check them for proper canonicalization, verify that
VR_{VARYING,UNDEFINED} objects do not have equivalences, etc. Thoughts?
In patch 01 we have:
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 594ee9adc17..97046c22ed1 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -86,6 +86,8 @@ value_range_base::set (enum value_range_kind kind, tree min, t
ree max)
void
value_range::set_equiv (bitmap equiv)
{
+ if (undefined_p () || varying_p ())
+ equiv = NULL;
So it shouldn't be possible to attach an equivalence to a VARYING /
UNDEFINED range. Plus, we already have a sanity checker:
void
value_range::check ()
{
value_range_base::check ();
switch (m_kind)
{
case VR_UNDEFINED:
case VR_VARYING:
gcc_assert (!m_equiv || bitmap_empty_p (m_equiv));
default:;
}
}
We have no methods for altering a range, except for changing
equivalences. So it shouldn't be possible to create a non-canonicalized
range.
Aldy