PATCH: Fix search-and-replaceo in optimize_mode_switching?

Toshiyasu Morita toshiyasu.morita@hsa.hitachi.com
Thu May 23 14:49:00 GMT 2002


When GCC CVS head is configured for --target=sh-elf and built, this error
occurs:

gcc -c -DIN_GCC -DCROSS_COMPILE   -g -O2 -W -Wall -Wwrite-strings -Wstrict-p
rototypes -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long  -DHAV
E_CONFIG_H    -I. -I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/conf
ig -I../../gcc/gcc/../include ../../gcc/gcc/lcm.c -o lcm.o
../../gcc/gcc/lcm.c: In function `optimize_mode_switching':
../../gcc/gcc/lcm.c:1063: warning: comparison between signed and unsigned
../../gcc/gcc/lcm.c:1152: array subscript is not an integer
../../gcc/gcc/lcm.c:1153: array subscript is not an integer
../../gcc/gcc/lcm.c:1158: array subscript is not an integer
../../gcc/gcc/lcm.c:1160: array subscript is not an integer
../../gcc/gcc/lcm.c:1161: array subscript is not an integer
../../gcc/gcc/lcm.c:1166: array subscript is not an integer
make[1]: *** [lcm.o] Error 1

Looks like someone made a search-and-replaceo? Patch enclosed.

Also, sh-elf has been broken for about two weeks now. It still
triggers an RTL flag check:

cc1: RTL flag check: CONSTANT_POOL_ADDDRESS_P used with unexpected rtx code
`const_int' in nonmemory_operand, at recog.c:1222

2002-05-23  Toshiyasu Morita  <toshiyasu.morita@hsa.hitachi.com>

	* lcm.c (optimize_mode_switching): Change bb used as indices
	to bb->index.

*** lcm.c.bak	Thu May 23 13:55:02 2002
--- lcm.c	Thu May 23 13:55:36 2002
*************** optimize_mode_switching (file)
*** 1149,1169 ****
  		/* If the block already has MODE, pretend it
  		   has none (because we don't need to set it),
  		   but retain whatever mode it computes.  */
! 		if (info[bb].seginfo->mode == mode)
! 		  info[bb].seginfo->mode = no_mode;

  		/* Insert a fake computing definition of MODE into entry
  		   blocks which compute no mode. This represents the mode on
  		   entry.  */
! 		else if (info[bb].computing == no_mode)
  		  {
! 		    info[bb].computing = mode;
! 		    info[bb].seginfo->mode = no_mode;
  		  }
  	      }

  	    bb = EXIT_BLOCK_PTR;
! 	    info[bb].seginfo->mode = mode;
  	  }
        }
  #endif /* NORMAL_MODE */
--- 1149,1169 ----
  		/* If the block already has MODE, pretend it
  		   has none (because we don't need to set it),
  		   but retain whatever mode it computes.  */
! 		if (info[bb->index].seginfo->mode == mode)
! 		  info[bb->index].seginfo->mode = no_mode;

  		/* Insert a fake computing definition of MODE into entry
  		   blocks which compute no mode. This represents the mode on
  		   entry.  */
! 		else if (info[bb->index].computing == no_mode)
  		  {
! 		    info[bb->index].computing = mode;
! 		    info[bb->index].seginfo->mode = no_mode;
  		  }
  	      }

  	    bb = EXIT_BLOCK_PTR;
! 	    info[bb->index].seginfo->mode = mode;
  	  }
        }
  #endif /* NORMAL_MODE */



More information about the Gcc-patches mailing list