builtins.c (expand_movstr): Update a call to fold_builtin_strcpy.
* 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. From-SVN: r96555
This commit is contained in:
parent
00c714edd6
commit
a456b43276
@ -1,3 +1,17 @@
|
||||
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>
|
||||
|
||||
|
@ -2942,10 +2942,11 @@ expand_movstr (tree dest, tree src, rtx target, int endp)
|
||||
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, HOST_WIDE_INT offset,
|
||||
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 type)
|
||||
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);
|
||||
|
@ -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:
|
||||
|
@ -3565,8 +3565,8 @@ extern bool ptr_difference_const (tree, tree, HOST_WIDE_INT *);
|
||||
/* 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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user