> When testing with -freorder-blocks-and-partition enabled, I hit a
> verification failure in an LTO profiledbootstrap. Edge forwarding
> performed when we went into cfg layout mode after bb reordering
> (during compgotos) created a situation where a hot block was then
> dominated by a cold block and was therefore remarked as cold. Because
> bb reorder was complete at that point, it was not moved in the
> physical layout, and we incorrectly went in and out of the cold
> section multiple times.
> 
> The following patch addresses that by fixing the layout when we move
> blocks to the cold section after bb reordering is complete.
> 
> Tested with an LTO profiledbootstrap with
> -freorder-blocks-and-partition enabled. Ok for trunk?
> 
> Thanks,
> Teresa
> 
> 2013-11-15  Teresa Johnson  <tejohn...@google.com>
> 
>         * cfgrtl.c (fixup_partitions): Reorder blocks if necessary.

computed_gotos just unfactors unified blocks that we use to avoid CFGs with
O(n^2) edges. This is mostly to avoid problems with nonlinearity of other passes
and to reduce the quadratic memory use case to one function at a time.

I wonder if it won't be cleaner to simply unfactor those just before 
pass_reorder_blocks.

Computed gotos are used e.g. in libjava interpreter to optimize the tight 
interpretting
loop.  I think those cases would benefit from having at least 
scheduling/reordering
and alignments done right.

Of course it depends on how bad the compile time implications are (I think in 
addition
to libjava, there was a lucier's testcase that made us to go for this trick) ,
but I would prefer it over ading yet another hack into cfgrtl...
We also may just avoid cfglayout cleanup_cfg while doing computed gotos...

Honza

Reply via email to