[gnu.g++.bug] inline function problems?

tiemann@arkesden.eng.sun.com (Michael Tiemann) (12/06/89)

Here are diffs against the 1.36.2- version of integrate.c on
interviews.  They fix problems compiling painter.cc on m68k, and
probably the MIPS machine.  There is also one patch which applies to
all machines.

arkesden% diff -c2 old-g++/integrate.c src-g++/integrate.c
*** old-g++/integrate.c	Mon Nov 27 10:55:14 1989
--- src-g++/integrate.c	Tue Dec  5 10:24:52 1989
***************
*** 142,146 ****
  
    /* If its not even close, don't even look.  */
!   if (get_max_uid () > 3 * max_insns)
      return "function too large to be inline";
  
--- 142,146 ----
  
    /* If its not even close, don't even look.  */
!   if (get_max_uid () > 4 * max_insns)
      return "function too large to be inline";
  
***************
*** 1606,1610 ****
  			  copy_rtx_and_substitute (XEXP (orig, 0)),
  			  copy_rtx_and_substitute (XEXP (orig, 1)));
! 	  if (memory_address_p (mode, orig))
  	    temp = memory_address (mode, temp);
  	}
--- 1606,1620 ----
  			  copy_rtx_and_substitute (XEXP (orig, 0)),
  			  copy_rtx_and_substitute (XEXP (orig, 1)));
! 
! 	  if (used_const_equiv)
! 	    {
! 	      if (GET_CODE (XEXP (temp, 0)) == CONST_INT)
! 		temp = plus_constant (XEXP (temp, 1), INTVAL (XEXP (temp, 0)));
! 	      else if (GET_CODE (XEXP (temp, 1)) == CONST_INT)
! 		temp = plus_constant (XEXP (temp, 0), INTVAL (XEXP (temp, 1)));
! 	      else if (memory_address_p (mode, orig))
! 		temp = gen_rtx (CONST, mode, temp);
! 	    }
! 	  else if (memory_address_p (mode, orig))
  	    temp = memory_address (mode, temp);
  	}
***************
*** 1611,1614 ****
--- 1621,1638 ----
        return temp;
  
+     case MULT:
+       temp = gen_rtx (MULT, GET_MODE (orig),
+ 		      copy_rtx_and_substitute (XEXP (orig, 0)),
+ 		      copy_rtx_and_substitute (XEXP (orig, 1)));
+ 
+       if (used_const_equiv)
+ 	{
+ 	  if (GET_CODE (XEXP (temp, 0)) == CONST_INT
+ 	      && GET_CODE (XEXP (temp, 1)) == CONST_INT)
+ 	    temp = gen_rtx (CONST_INT, VOIDmode,
+ 			    INTVAL (XEXP (temp, 0)) * INTVAL (XEXP (temp, 1)));
+ 	}
+       return temp;
+ 
      case MEM:
        /* Take care of easiest case here.  */
***************
*** 2048,2052 ****
  			 followed by a BARRIER, so that jump optimization
  			 will know what to do.  */
! 		      emit_jump (copy);
  		      return NEXT_INSN (insn);
  		    }
--- 2072,2076 ----
  			 followed by a BARRIER, so that jump optimization
  			 will know what to do.  */
! 		      emit_jump (XEXP (copy, 0));
  		      return NEXT_INSN (insn);
  		    }
arkesden%