On October 31, 2017 4:49:20 PM GMT+01:00, Jeff Law <l...@redhat.com> wrote:
>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.

Maybe that's not necessary in most places given existing bitmaps know their 
obstack? IIRC most places do sth to equivalences only if a range already 
contains some. 

Richard. 

>
>Jeff

Reply via email to