rs6000 / PowerPC now uses no_new_pseudos

David Edelsohn dje@watson.ibm.com
Sat Apr 3 22:47:00 GMT 1999


	* rs6000.md (addsi3, iorsi3, xorsi3, adddi3, iordi3, xordi3,
	movsi_got, movsi, movsf): Use no_new_pseudos.
	* rs6000.c (rs6000_got_register): Likewise.
	(offsettable_mem_opereand): Use || not |.

Index: rs6000.md
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/rs6000/rs6000.md,v
retrieving revision 1.51
diff -c -p -r1.51 rs6000.md
*** rs6000.md	1999/02/28 12:27:04	1.51
--- rs6000.md	1999/04/04 06:27:25
***************
*** 895,904 ****
    ""
    "
  {
!   if (GET_CODE (operands[2]) == CONST_INT && !add_operand (operands[2], SImode))
      {
!       rtx tmp = ((reload_in_progress || reload_completed
! 		  || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
--- 895,904 ----
    ""
    "
  {
!   if (GET_CODE (operands[2]) == CONST_INT
! 		&& ! add_operand (operands[2], SImode))
      {
!       rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
***************
*** 1953,1963 ****
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && !logical_operand (operands[2], SImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((reload_in_progress || reload_completed
! 		  || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        emit_insn (gen_iorsi3 (tmp, operands[1],
--- 1953,1962 ----
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && ! logical_operand (operands[2], SImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        emit_insn (gen_iorsi3 (tmp, operands[1],
***************
*** 2061,2071 ****
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && !logical_operand (operands[2], SImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((reload_in_progress || reload_completed
! 		  || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        emit_insn (gen_xorsi3 (tmp, operands[1],
--- 2060,2069 ----
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && ! logical_operand (operands[2], SImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (SImode));
  
        emit_insn (gen_xorsi3 (tmp, operands[1],
***************
*** 4798,4807 ****
      }
    else
      if (GET_CODE (operands[2]) == CONST_INT
! 	&& !add_operand (operands[2], DImode))
        {
! 	rtx tmp = ((reload_in_progress || reload_completed
! 		    || rtx_equal_p (operands[0], operands[1]))
  		   ? operands[0] : gen_reg_rtx (DImode));
  
  	HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
--- 4796,4804 ----
      }
    else
      if (GET_CODE (operands[2]) == CONST_INT
! 	&& ! add_operand (operands[2], DImode))
        {
! 	rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		   ? operands[0] : gen_reg_rtx (DImode));
  
  	HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
***************
*** 5489,5499 ****
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && !logical_operand (operands[2], DImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((reload_in_progress || reload_completed
! 		  || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (DImode));
  
        emit_insn (gen_iordi3 (tmp, operands[1],
--- 5486,5495 ----
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && ! logical_operand (operands[2], DImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (DImode));
  
        emit_insn (gen_iordi3 (tmp, operands[1],
***************
*** 5558,5568 ****
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && !logical_operand (operands[2], DImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((reload_in_progress || reload_completed
! 		  || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (DImode));
  
        emit_insn (gen_xordi3 (tmp, operands[1],
--- 5554,5563 ----
    "
  {
    if (GET_CODE (operands[2]) == CONST_INT
!       && ! logical_operand (operands[2], DImode))
      {
        HOST_WIDE_INT value = INTVAL (operands[2]);
!       rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  		 ? operands[0] : gen_reg_rtx (DImode));
  
        emit_insn (gen_xordi3 (tmp, operands[1],
***************
*** 5796,5804 ****
        value = INTVAL (offset);
        if (value != 0)
  	{
! 	  rtx tmp = ((reload_in_progress || reload_completed)
! 		     ? operands[0]
! 		     : gen_reg_rtx (Pmode));
  	  emit_insn (gen_movsi_got (tmp, operands[1]));
  	  emit_insn (gen_addsi3 (operands[0], tmp, offset));
  	  DONE;
--- 5791,5797 ----
        value = INTVAL (offset);
        if (value != 0)
  	{
! 	  rtx tmp = (no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode));
  	  emit_insn (gen_movsi_got (tmp, operands[1]));
  	  emit_insn (gen_addsi3 (operands[0], tmp, offset));
  	  DONE;
***************
*** 5891,5898 ****
        && GET_CODE (operands[1]) != HIGH
        && GET_CODE (operands[1]) != CONST_INT)
      {
!       rtx target = (reload_completed || reload_in_progress)
! 			? operands[0] : gen_reg_rtx (SImode);
  
        /* If this is a function address on -mcall-aixdesc or -mcall-nt,
  	 convert it to the address of the descriptor.  */
--- 5884,5890 ----
        && GET_CODE (operands[1]) != HIGH
        && GET_CODE (operands[1]) != CONST_INT)
      {
!       rtx target = (no_new_pseudos ? operands[0] : gen_reg_rtx (SImode));
  
        /* If this is a function address on -mcall-aixdesc or -mcall-nt,
  	 convert it to the address of the descriptor.  */
***************
*** 5926,5935 ****
  	  && (GET_CODE (sym) == SYMBOL_REF || GET_CODE (sym) == LABEL_REF))
  	{
  	  unsigned HOST_WIDE_INT value = INTVAL (const_term);
! 	  int new_reg_p = (flag_expensive_optimizations
! 			   && !reload_completed
! 			   && !reload_in_progress);
! 	  rtx tmp1 = (new_reg_p && value != 0) ? gen_reg_rtx (SImode) : operands[0];
  
  	  emit_insn (gen_movsi (tmp1, sym));
  	  if (INTVAL (const_term) != 0)
--- 5918,5926 ----
  	  && (GET_CODE (sym) == SYMBOL_REF || GET_CODE (sym) == LABEL_REF))
  	{
  	  unsigned HOST_WIDE_INT value = INTVAL (const_term);
! 	  int new_reg_p = (flag_expensive_optimizations && ! no_new_pseudos);
! 	  rtx tmp1 = ((new_reg_p && value != 0)
! 		      ? gen_reg_rtx (SImode) : operands[0]);
  
  	  emit_insn (gen_movsi (tmp1, sym));
  	  if (INTVAL (const_term) != 0)
***************
*** 6161,6168 ****
  	  && (FP_REGNO_P (REGNO (operands[1]))
  	      || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
  	{
! 	  rtx newreg
! 	    = reload_in_progress ? operands[1] : gen_reg_rtx (SFmode);
  	  emit_insn (gen_aux_truncdfsf2 (newreg, operands[1]));
  	  operands[1] = newreg;
  	}
--- 6152,6158 ----
  	  && (FP_REGNO_P (REGNO (operands[1]))
  	      || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
  	{
! 	  rtx newreg = (no_new_pseudos ? operands[1] : gen_reg_rtx (SFmode));
  	  emit_insn (gen_aux_truncdfsf2 (newreg, operands[1]));
  	  operands[1] = newreg;
  	}
Index: rs6000.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.63
diff -c -p -r1.63 rs6000.c
*** rs6000.c	1999/03/15 19:47:42	1.63
--- rs6000.c	1999/04/04 06:27:56
*************** offsettable_mem_operand (op, mode)
*** 854,860 ****
       enum machine_mode mode;
  {
    return ((GET_CODE (op) == MEM)
! 	  && offsettable_address_p (reload_completed | reload_in_progress,
  				    mode, XEXP (op, 0)));
  }
  
--- 854,860 ----
       enum machine_mode mode;
  {
    return ((GET_CODE (op) == MEM)
! 	  && offsettable_address_p (reload_completed || reload_in_progress,
  				    mode, XEXP (op, 0)));
  }
  
*************** struct rtx_def *
*** 2335,2344 ****
  rs6000_got_register (value)
       rtx value;
  {
!   if (!current_function_uses_pic_offset_table || !pic_offset_table_rtx)
      {
!       if (reload_in_progress || reload_completed)
! 	fatal_insn ("internal error -- needed new GOT register during reload phase to load:", value);
  
        current_function_uses_pic_offset_table = 1;
        pic_offset_table_rtx = gen_rtx_REG (Pmode, GOT_TOC_REGNUM);
--- 2335,2345 ----
  rs6000_got_register (value)
       rtx value;
  {
!   if (! current_function_uses_pic_offset_table || ! pic_offset_table_rtx)
      {
!       if (no_new_pseudos)
! 	fatal_insn ("internal error -- needed new GOT register during reload phase to load:",
! 		    value);
  
        current_function_uses_pic_offset_table = 1;
        pic_offset_table_rtx = gen_rtx_REG (Pmode, GOT_TOC_REGNUM);


More information about the Gcc-patches mailing list