patch to reduce register pressure from strength reduction

Joern Rennecke amylaar@cygnus.co.uk
Thu Jan 28 15:27:00 GMT 1999


> Although I haven't proof yet that this was caused by your patch, your
> changes were the largest ones between this bootstrap and yesterday's.

Indeed, I found that recombine_givs caused the use of an uninitialized
pseudo.

> On what system did you test this ?  (Just wondering because x86's seem
> so ubiquitous that it's sort of strange that the build breaks on it).

I did a SH cross torture test and an x86 native torture test.  I don't
like bootstraps for tests because it doesn't allow to rebuild the
compiler at will - if I can find the same bug with a c-torture failure,
it's usually much faster to find out what is wrong.

I've made the following patch, which I am currently testing:

Wed Jan 27 23:39:53 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (recombine_givs): Don't try to derive givs that have combined.

*** loop.c-1999012820	Thu Jan 28 20:10:04 1999
--- loop.c	Thu Jan 28 23:01:45 1999
*************** recombine_givs (bl, loop_start, loop_end
*** 7269,7284 ****
  	  rtx sum;
  
  	  v = giv_array[stats[i].giv_number];
! 	  if (v->giv_type != DEST_REG || v->derived)
  	    continue;
  	  if (! last_giv)
  	    {
! 	      if (! v->same)
! 		{
! 		  last_giv = v;
! 		  life_start = stats[i].start_luid;
! 		  life_end = stats[i].end_luid;
! 		}
  	      continue;
  	    }
  	  /* Use unsigned arithmetic to model loop wrap around.  */
--- 7269,7281 ----
  	  rtx sum;
  
  	  v = giv_array[stats[i].giv_number];
! 	  if (v->giv_type != DEST_REG || v->derived || v->same)
  	    continue;
  	  if (! last_giv)
  	    {
! 	      last_giv = v;
! 	      life_start = stats[i].start_luid;
! 	      life_end = stats[i].end_luid;
  	      continue;
  	    }
  	  /* Use unsigned arithmetic to model loop wrap around.  */



More information about the Gcc-patches mailing list