This is the mail archive of the gcc-patches@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: Speed up jump threading


Jan Hubicka <jh@suse.cz> writes:

> Hi,
> part of cselib problems I am seeing is that it is used quite extensivly by jump
> threading.  The patch reduces number of calls of cselib_init from 17000 to
> roughly 9757 on combine.c compilation with no effect on final code by
> keeping track of basic blocks that has been modified and avoiding
> re-doing the job on basic blocks that didn't.
> 
> Bootstrapped/regtested i686-pc-gnu-linux.  OK?
> 
> Honza
> 
> 2004-01-22  Jan Hubicka  <jh@suse.cz>
> 	* cfgcleanup.c (first_pass): New static variable.
> 	(try_forward_edges):  Add work limiting check for threading.
> 	(try_crossjump_bb):  Add work limiting check for crossjumping.
> 	(try_optimize_cfg):  Maintain first pass variable.
> *** 423,434 ****
> --- 425,438 ----
>     bool changed = false;
>     edge e, next, *threaded_edges = NULL;
>   
> + 
>     for (e = b->succ; e; e = next)
>       {

Random Whitespace Change.

> *************** try_crossjump_bb (int mode, basic_block 
> *** 1573,1578 ****
> --- 1578,1590 ----
>   	     If there is a match, we'll do it the other way around.  */
>   	  if (e == fallthru)
>   	    continue;
> + 	  /* If nothing changed since the last attempt, there is nothing
> + 	     we can do.  */
> + 	  if (!first_pass
> + 	      && (!(e->src->flags & BB_DIRTY)
> + 		  && !(fallthru->src->flags & BB_DIRTY)))
> + 	    continue;
> + 
>   
>   	  if (try_crossjump_to_edge (mode, e, fallthru))
>   	    {

Here, too.

Otherwise OK.

-- 
- Geoffrey Keating <geoffk@geoffk.org>


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