This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] builtins.c: Change fold_builtin_strcpy to take decomposedarguments.


Hi,

Attached is a patch to change fold_builtin_strcpy and
fold_builtin_strncpy to take decomposed arguments.

For a patch description, see:

http://gcc.gnu.org/ml/gcc-patches/2005-03/msg00916.html

This patch is a fold_builtin_strcpy version of Roger's patch above.

Tested on i686-pc-linux-gnu.  OK to apply?

Kazu Hirata

2005-03-16  Kazu Hirata  <kazu@cs.umass.edu>

	* builtins.c (expand_movstr): Update a call to
	fold_builtin_strcpy.
	(expand_builtin_strncpy): Update a call to
	fold_builtin_strncpy.
	(fold_builtin_strcpy, fold_builtin_strncpy): Take decomosed
	arguments of CALL_EXPR.
	(fold_builtin_1): Update calls to fold_builtin_strcpy and
	fold_builtin_strncpy.
	* tree-ssa-ccp.c (ccp_fold_builtin): Likewise.
	* tree.h: Update the prototypes of fold_builtin_strcpy and
	fold_builtin_strncpy.

Index: builtins.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/builtins.c,v
retrieving revision 1.436
diff -u -d -p -r1.436 builtins.c
--- builtins.c	15 Mar 2005 04:24:00 -0000	1.436
+++ builtins.c	15 Mar 2005 17:51:03 -0000
@@ -2942,10 +2942,11 @@ expand_movstr (tree dest, tree src, rtx 
 static rtx
 expand_builtin_strcpy (tree exp, rtx target, enum machine_mode mode)
 {
+  tree fndecl = get_callee_fndecl (exp);
   tree arglist = TREE_OPERAND (exp, 1);
   if (validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
     {
-      tree result = fold_builtin_strcpy (exp, 0);
+      tree result = fold_builtin_strcpy (fndecl, arglist, 0);
       if (result)
 	return expand_expr (result, target, mode, EXPAND_NORMAL);
 
@@ -3062,13 +3063,14 @@ builtin_strncpy_read_str (void *data, HO
 static rtx
 expand_builtin_strncpy (tree exp, rtx target, enum machine_mode mode)
 {
+  tree fndecl = get_callee_fndecl (exp);
   tree arglist = TREE_OPERAND (exp, 1);
   if (validate_arglist (arglist,
 			POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
     {
       tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1);
       tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
-      tree result = fold_builtin_strncpy (exp, slen);
+      tree result = fold_builtin_strncpy (fndecl, arglist, slen);
       
       if (result)
 	return expand_expr (result, target, mode, EXPAND_NORMAL);
@@ -7254,10 +7256,8 @@ fold_builtin_memmove (tree arglist, tree
    simplification can be made.  */
 
 tree
-fold_builtin_strcpy (tree exp, tree len)
+fold_builtin_strcpy (tree fndecl, tree arglist, tree len)
 {
-  tree fndecl = get_callee_fndecl (exp);
-  tree arglist = TREE_OPERAND (exp, 1);
   tree dest, src, fn;
 
   if (!validate_arglist (arglist,
@@ -7298,10 +7298,8 @@ fold_builtin_strcpy (tree exp, tree len)
    can be made.  */
 
 tree
-fold_builtin_strncpy (tree exp, tree slen)
+fold_builtin_strncpy (tree fndecl, tree arglist, tree slen)
 {
-  tree fndecl = get_callee_fndecl (exp);
-  tree arglist = TREE_OPERAND (exp, 1);
   tree dest, src, len, fn;
 
   if (!validate_arglist (arglist,
@@ -8003,10 +8001,10 @@ fold_builtin_1 (tree exp, bool ignore)
       return fold_builtin_strrchr (arglist, type);
 
     case BUILT_IN_STRCPY:
-      return fold_builtin_strcpy (exp, NULL_TREE);
+      return fold_builtin_strcpy (fndecl, arglist, NULL_TREE);
 
     case BUILT_IN_STRNCPY:
-      return fold_builtin_strncpy (exp, NULL_TREE);
+      return fold_builtin_strncpy (fndecl, arglist, NULL_TREE);
 
     case BUILT_IN_STRCMP:
       return fold_builtin_strcmp (arglist);
Index: tree-ssa-ccp.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-ccp.c,v
retrieving revision 2.58
diff -u -d -p -r2.58 tree-ssa-ccp.c
--- tree-ssa-ccp.c	24 Feb 2005 18:58:04 -0000	2.58
+++ tree-ssa-ccp.c	15 Mar 2005 17:51:04 -0000
@@ -1999,12 +1999,20 @@ ccp_fold_builtin (tree stmt, tree fn)
 
     case BUILT_IN_STRCPY:
       if (strlen_val[1] && is_gimple_val (strlen_val[1]))
-        result = fold_builtin_strcpy (fn, strlen_val[1]);
+	{
+	  tree fndecl = get_callee_fndecl (fn);
+	  tree arglist = TREE_OPERAND (fn, 1);
+	  result = fold_builtin_strcpy (fndecl, arglist, strlen_val[1]);
+	}
       break;
 
     case BUILT_IN_STRNCPY:
       if (strlen_val[1] && is_gimple_val (strlen_val[1]))
-	result = fold_builtin_strncpy (fn, strlen_val[1]);
+	{
+	  tree fndecl = get_callee_fndecl (fn);
+	  tree arglist = TREE_OPERAND (fn, 1);
+	  result = fold_builtin_strncpy (fndecl, arglist, strlen_val[1]);
+	}
       break;
 
     case BUILT_IN_FPUTS:
Index: tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree.h,v
retrieving revision 1.701
diff -u -d -p -r1.701 tree.h
--- tree.h	14 Mar 2005 16:21:13 -0000	1.701
+++ tree.h	15 Mar 2005 17:51:05 -0000
@@ -3565,8 +3565,8 @@ extern bool ptr_difference_const (tree, 
 /* In builtins.c */
 extern tree fold_builtin (tree, bool);
 extern tree fold_builtin_fputs (tree, bool, bool, tree);
-extern tree fold_builtin_strcpy (tree, tree);
-extern tree fold_builtin_strncpy (tree, tree);
+extern tree fold_builtin_strcpy (tree, tree, tree);
+extern tree fold_builtin_strncpy (tree, tree, tree);
 extern bool fold_builtin_next_arg (tree);
 extern enum built_in_function builtin_mathfn_code (tree);
 extern tree build_function_call_expr (tree, tree);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]