[patch]: cleanup more builtins 1/5-5/5

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Mon Oct 4 04:40:00 GMT 2004


 >  > I appreciate we're not exactly consistent with these semantics at
 >  > the moment, but your patches 2/5 and 3/5 move us slightly further
 >  > away from the ideal.
 >  > 
 >  > I hope this sounds acceptable?
 > 
 > Sure.  Will resubmit.
 > 	    --Kaveh

Here's part 2/5 (memcpy) redone per your feedback.  Booted on
sparc-sun-solaris2.9, no regressions and installed.



2004-10-01  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* builtins.c (expand_builtin_memcpy): Delete duplicate code
	and make the first parameter the expression not the arglist.

diff -rup orig/egcc-CVS20041002/gcc/builtins.c egcc-CVS20041002/gcc/builtins.c
--- orig/egcc-CVS20041002/gcc/builtins.c	2004-10-02 21:56:44.000000000 -0400
+++ egcc-CVS20041002/gcc/builtins.c	2004-10-03 07:56:17.311726213 -0400
@@ -2544,8 +2544,9 @@ builtin_memcpy_read_str (void *data, HOS
    otherwise try to get the result in TARGET, if convenient (and in
    mode MODE if that's convenient).  */
 static rtx
-expand_builtin_memcpy (tree arglist, rtx target, enum machine_mode mode)
+expand_builtin_memcpy (tree exp, rtx target, enum machine_mode mode)
 {
+  tree arglist = TREE_OPERAND (exp, 1);
   if (!validate_arglist (arglist,
 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
     return 0;
@@ -2559,27 +2560,15 @@ expand_builtin_memcpy (tree arglist, rtx
       unsigned int dest_align
 	= get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
       rtx dest_mem, src_mem, dest_addr, len_rtx;
+      tree result = fold_builtin_memcpy (exp);
+
+      if (result)
+	return expand_expr (result, target, mode, EXPAND_NORMAL);
 
       /* If DEST is not a pointer type, call the normal function.  */
       if (dest_align == 0)
 	return 0;
 
-      /* If the LEN parameter is zero, return DEST.  */
-      if (integer_zerop (len))
-	{
-	  /* Evaluate and ignore SRC in case it has side-effects.  */
-	  expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
-	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
-	}
-
-      /* If SRC and DEST are the same (and not volatile), return DEST.  */
-      if (operand_equal_p (src, dest, 0))
-	{
-	  /* Evaluate and ignore LEN in case it has side-effects.  */
-	  expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
-	  return expand_expr (dest, target, mode, EXPAND_NORMAL);
-	}
-
       /* If either SRC is not a pointer type, don't do this
          operation in-line.  */
       if (src_align == 0)
@@ -5490,7 +5479,7 @@ expand_builtin (tree exp, rtx target, rt
       break;
 
     case BUILT_IN_MEMCPY:
-      target = expand_builtin_memcpy (arglist, target, mode);
+      target = expand_builtin_memcpy (exp, target, mode);
       if (target)
 	return target;
       break;



More information about the Gcc-patches mailing list