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