[patch] PR15242

Mark Mitchell mark@codesourcery.com
Thu Jan 27 17:49:00 GMT 2005


Steven Bosscher wrote:
> Hi,
> 
> This patch is a first shot at fixing PR15242, a regression from
> GCC 3.2.  A similar patch was proposed months ago by Josef Zlomek,
> but it never got a proper review.
> 
> The issue is that we factor computed gotos early in the optimization
> path to make the cfg less dense.  This makes data flow solvers a lot
> faster.  But we never properly unfactor the computed jump again, and
> this results in slowdowns of as much as 300% in real world code like
> interpreters and simulators.
> 
> With the attached patch, we unfactor the computed gotos as late as
> possible.  The solution is suboptimal - it would be better if we
> could unfactor before scheduling for example - but this patch seems
> to do the job well enough to fix the regression.
> 
> There is the hard-coded "8" in bb-reorder.c.  Probably that should
> be a param.  The only reason that it is not, is because I couldn't
> come up with a good name for it ;-)  Suggestions are welcome.
> 
> Bootstrapped and tested on {ia64,i686}-suse-linux-gnu.  I have also
> checked that we unfactor the computed jumps for a Prolog interpreter
> that suffered from this regression.
> 
> Comments?  OK for mainline?

This looks good to me, except make that "8" into 
"max-goto-duplication-insns".  Not a great name, but a name.

(You could also make your patch more efficient by changing 
"bb_insn_length (bb) <= max_size" into "bb_insn_length_le (bb, 
max_size)", as you could then stop iterating through the block once it 
got big.  That would reduce that check from O(insns-in-block) to O(1).)

I'll approve the patch with those changes -- but please hold off for 48 
hours to give other people with more expertise a chance to object.

-- 
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304



More information about the Gcc-patches mailing list