http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55135



--- Comment #16 from Steven Bosscher <steven at gcc dot gnu.org> 2013-03-01 
14:35:20 UTC ---

(In reply to comment #15)

> > - Queue up to-be-removed EH regions, instead of removing them one-by-one.

> >   Removing them one at a time results in walking the list of EH regions

> >   repeatedly, thus taking O(# of EH regions ** 2) time.

> This (properly cleaned up) looks reasonable to me.



It's not yet complete, I think I need to update the outer region pointers

for the inner region if an outer region is removed. But I think this is

the right approach.





> > - Rewrite init_subregs_of_mode and subroutines to first collect the

> >   invalid mode change subregs in sbitmaps, and then converting the final

> >   sbitmap to a bitmap. This trades memory for time: the bitmap lookups are

> >   also potentially O(# of registers ** 2) and this test case has more than

> >   one million registers, many of them with invalid mode changes (to be fixed

> >   up by IRA/LRA).

> Hmm - this is because we hit the O(n) complexity we have on our bitmap

> implementation?



Yes.



>  Can't we improve init_subregs_of_mode by first collecting

> all mode changes we see for a pseudo (eventually using DF info?) and

> then do the processing in some more optimal order?



Yes. That is the plan, this was just a proof-of-concept fix (I didn't call

it a patch, I called it a hack - for the good reasons you mentioned :-).



I also want to add a better way to lookup bits as random-access in bitmaps:

change the "view" of the bitmap, much like what tree-ssa-live does with its

maps).

Reply via email to