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]

Re: scheduler speedup


> On Thu, Oct 25, 2001 at 03:09:37PM +0200, Jan Hubicka wrote:
> > No, the first loop is computing sums, the second loop makes a walk over all
> > code to be modified and removes the death notes.
> 
> No.  This is equivalent to
> 
> 	if (CHECK_DEAD_NOTES)
> 	  {
> 	    deaths_in_region = (int *) xmalloc (sizeof (int) * nr_regions);
> 	    for (rgn = 0; rgn < nr_regions; rgn++)
> 	      {
> 	        sbitmap_zero (blocks);
> 		for (b = RGN_NR_BLOCKS (rgn) - 1; b >= 0; --b)
> 		  SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn) + b]);
> 		deaths_in_region[rgn]
> 		  = count_or_remove_death_notes (blocks, 1);
I don't think so. (this was actually my first attempt).
In case you do have two overlapping regions (to my understanding this can
happen), you first remove notes from one region and then checksum the another,
the second region will already miss the notes.

If you then rebuild the notes at once and start to verify the regions, you
will fail, as the originally removed notes will be already present.

Alternative is the current way to rebuild liveness information per region
basis, while computing the checksum, but it appears to be costy - that way
you do 3 per region passes, instead of two and two whole-chain (much faster).

Honza
> 	      }
> 	  }
> 	else
> 	  count_or_remove_death_notes (NULL, 1);
> 
> 
> r~


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