On 10/31/2017 04:36 AM, Richard Biener wrote:
> On October 31, 2017 10:49:51 AM GMT+01:00, Kugan Vivekanandarajah
> <kugan.vivekanandara...@linaro.org> wrote:
>> Hi Jeff,
>> 
>> On 31 October 2017 at 14:47, Jeff Law <l...@redhat.com> wrote:
>>> On 10/29/2017 03:54 PM, Kugan Vivekanandarajah wrote:
>>>> Hi Jeff,
>>>> 
>>>> On 28 October 2017 at 18:28, Jeff Law <l...@redhat.com> wrote:
>>>>> 
>>>>> Jan,
>>>>> 
>>>>> What's the purpose behind calling vrp_meet and 
>>>>> extract_range_from_unary_expr from within the IPA passes?
>>>> 
>>>> This is used such that when we have an argument to a function
>>>> and
>> this
>>>> for which we know the VR and this intern is passed as a
>>>> parameter to another. For example:
>>>> 
>>>> void foo (int i) { ... bar (unary_op (i)) ... }
>>>> 
>>>> This is mainly to share what is done in tree-vrp.
>>> Presumably you never have equivalences or anything like that,
>>> which probably helps with not touching vrp_bitmap_obstack which
>>> isn't initialized when you run the IPA bits.
>>> 
>>>>> 
>>>>> AFAICT that is not safe to do.  Various paths through those
>> routines
>>>>> will access static objects within tree-vrp.c which may not
>>>>> be initialized when IPA runs (vrp_equiv_obstack, vr_value).
>>>> 
>>>> IPA-VRP does not track equivalence and vr_value is not used.
>>> But there's no enforcement and I'd be hard pressed to believe
>>> that
>> all
>>> the paths through the routines you use in tree-vrp aren't going
>>> to
>> touch
>>> vr_value, or vrp_bitmap_obstack.  vrp_bitmap_obstack turns out to
>>> be incredibly tangled into the implementations within tree-vrp.c
>>> :(
>>> 
>> 
>> I looked into the usage and it does seem to be not using vr_value 
>> unless I am missing something. There are two overloaded functions 
>> here:
>> 
>> extract_range_from_unary_expr (value_range *vr, enum tree_code
>> code, tree type, value_range *vr0_, tree op0_type) is safe as this
>> works with value_range and does not use get_value_range to access
>> vr_value.
>> 
>> extract_range_from_unary_expr (value_range *vr, enum tree_code
>> code, tree type, tree op0) This is not safe as this takes tree as
>> an argument and gets value_range by calling get_value_range. May be
>> we should change the names to reflect this.
> 
> At some point I wanted to isolate those functions not relying on
> global state but I never came to do this. Those are the building
> blocks alternative range propagation stuff like Andrew's could use.
So in my tree it's no longer global state :-)

> And yes, equivalences are ugly... Ideally we'd have a base
> value-range class without them used by IPA and VRP (non-early) would
> use a derived class.
I'll look into that -- it's a fairly large wart in terms of global
access in vrp.

In my local tree I'm just passing around the vrp_bitmap_obstack right
now.  Nobody's accessing it via a global anymore.  So at least we know
what routines directly or indirectly want to touch vrp_bitmap_obstack.

Jeff

Reply via email to