On 7/3/19 3:35 AM, Aldy Hernandez wrote:
> 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.
Ah. Cool. Thanks for enlightening me ;-)
jeff