This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problems in IPA passes


On 11/01/2017 12:31 AM, Richard Biener wrote:

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.
I'd think that would help significantly if we're willing to make the assumption that all the bitmap allocations come from the same bitmap obstack.

For example set_value_range:

 /* Since updating the equivalence set involves deep copying the
     bitmaps, only do it if absolutely necessary.  */
  if (vr->equiv == NULL
      && equiv != NULL)
    vr->equiv = BITMAP_ALLOC (equiv_obstack);

If we assume that the equivalences always allocate from the same obstack, we can recover equiv_obstack from equiv->obstack when vr->equiv is NULL.

We see a similar pattern in vrp_intersection_ranges_1:

/* The resulting set of equivalences for range intersection is the union of
     the two sets.  */
  if (vr0->equiv && vr1->equiv && vr0->equiv != vr1->equiv)
    bitmap_ior_into (vr0->equiv, vr1->equiv);
  else if (vr1->equiv && !vr0->equiv)
    {
      vr0->equiv = BITMAP_ALLOC (equiv_obstack);
      bitmap_copy (vr0->equiv, vr1->equiv);
    }

We can use vr1->equiv->obstack to get to the obstack when vr0->equiv is NULL.

But the first, in set_value_range is probably the most important.

This may also enable certain functions to remain as free functions rather than having to move into a class. They should be easy to spot as well.

Again, the positive is this can be tested very quickly now. The joys of losing the global and getting some refactoring in done :-)

Jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]