This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Problems in IPA passes
- From: Jeff Law <law at redhat dot com>
- To: Kugan Vivekanandarajah <kugan dot vivekanandarajah at linaro dot org>
- Cc: Jan Hubicka <jh at suse dot cz>, GCC <gcc at gcc dot gnu dot org>
- Date: Mon, 30 Oct 2017 21:47:06 -0600
- Subject: Re: Problems in IPA passes
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=law at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8E0187EAA2
- References: <efc0a48d-d4ae-62e7-33a6-8cba5b126c09@redhat.com> <CAELXzTNJwp4j_Tx-YSSm9fYnukNb69uSddqzzRqZWi2CYpR0zw@mail.gmail.com>
On 10/29/2017 03:54 PM, Kugan Vivekanandarajah wrote:
> Hi Jeff,
>
> On 28 October 2017 at 18:28, Jeff Law <law@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 :(