How to reverse patch reversal in cfgcleanup.c (Was: RFA: re-instate struct_equiv code)

Bernd Schmidt bernds_cb1@t-online.de
Sun Jan 29 19:12:00 GMT 2006


Daniel Berlin wrote:
> We already update life info way too much, even without struct-equiv
> (Before struct equiv, this was done because flow's dce relied on
> register liveness, and we called it from everywhere under the sun,
> usually deep within other functions nobody realized were doing it).  I
> can tell you that *without* struct equiv, we update liveness at least 19
> or 20 times per compile, on average. Some are much much higher, because
> each cleanup_cfg iteration causes a life update.  This is a true time
> sink in the compiler.

Let me ask a really stupid question.  Where are we supposed to be 
clearing BB_DIRTY flags?

I instrumented the old version of the struct-equiv patches to give me 
some information about the basic blocks it's being called for, and 
noticed that blocks always remain dirty, even though we're calling 
update_life_info_in_dirty_blocks.  A quick grep showed no place in the 
compiler where the flag is cleared.  Under these circumstances, it's no 
surprise that we keep doing global liveness updates during crossjumping.

Sadly, a simple patch to clear the flag in update_life_info just failed 
to bootstrap with an internal compiler error.

Jan... the ChangeLogs suggest that you came up with BB_DIRTY.  How is 
this intended to work?


Bernd



More information about the Gcc mailing list