+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.
+
2005-03-16 Steven Bosscher <stevenb@suse.de>
Dorit Naishlos <dorit@il.ibm.com>
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);
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);
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,
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,
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);
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:
/* 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);