gimple-fold.h (gimple_fold_builtin): Remove.
2014-08-04 Richard Biener <rguenther@suse.de> * gimple-fold.h (gimple_fold_builtin): Remove. * gimple-fold.c (gimple_fold_builtin): Make static. * tree-ssa-ccp.c (pass_fold_builtins::execute): Use fold_stmt, not gimple_fold_builtin. From-SVN: r213585
This commit is contained in:
parent
24d4b3d500
commit
3daa26d0e9
4 changed files with 60 additions and 53 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-08-04 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gimple-fold.h (gimple_fold_builtin): Remove.
|
||||
* gimple-fold.c (gimple_fold_builtin): Make static.
|
||||
* tree-ssa-ccp.c (pass_fold_builtins::execute): Use
|
||||
fold_stmt, not gimple_fold_builtin.
|
||||
|
||||
2014-08-04 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* cgraph.h (csi_end_p): Removed.
|
||||
|
|
|
@ -873,7 +873,7 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type)
|
|||
Note that some builtins expand into inline code that may not
|
||||
be valid in GIMPLE. Callers must take care. */
|
||||
|
||||
tree
|
||||
static tree
|
||||
gimple_fold_builtin (gimple stmt)
|
||||
{
|
||||
tree result, val[3];
|
||||
|
|
|
@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see
|
|||
extern tree canonicalize_constructor_val (tree, tree);
|
||||
extern tree get_symbol_constant_value (tree);
|
||||
extern void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree);
|
||||
extern tree gimple_fold_builtin (gimple);
|
||||
extern bool fold_stmt (gimple_stmt_iterator *);
|
||||
extern bool fold_stmt_inplace (gimple_stmt_iterator *);
|
||||
extern tree maybe_fold_and_comparisons (enum tree_code, tree, tree,
|
||||
|
|
|
@ -2655,7 +2655,7 @@ pass_fold_builtins::execute (function *fun)
|
|||
for (i = gsi_start_bb (bb); !gsi_end_p (i); )
|
||||
{
|
||||
gimple stmt, old_stmt;
|
||||
tree callee, result;
|
||||
tree callee;
|
||||
enum built_in_function fcode;
|
||||
|
||||
stmt = gsi_stmt (i);
|
||||
|
@ -2680,62 +2680,69 @@ pass_fold_builtins::execute (function *fun)
|
|||
gsi_next (&i);
|
||||
continue;
|
||||
}
|
||||
|
||||
callee = gimple_call_fndecl (stmt);
|
||||
if (!callee || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL)
|
||||
{
|
||||
gsi_next (&i);
|
||||
continue;
|
||||
}
|
||||
|
||||
fcode = DECL_FUNCTION_CODE (callee);
|
||||
|
||||
result = gimple_fold_builtin (stmt);
|
||||
|
||||
if (result)
|
||||
gimple_remove_stmt_histograms (fun, stmt);
|
||||
|
||||
if (!result)
|
||||
switch (DECL_FUNCTION_CODE (callee))
|
||||
{
|
||||
case BUILT_IN_CONSTANT_P:
|
||||
/* Resolve __builtin_constant_p. If it hasn't been
|
||||
folded to integer_one_node by now, it's fairly
|
||||
certain that the value simply isn't constant. */
|
||||
result = integer_zero_node;
|
||||
break;
|
||||
|
||||
case BUILT_IN_ASSUME_ALIGNED:
|
||||
/* Remove __builtin_assume_aligned. */
|
||||
result = gimple_call_arg (stmt, 0);
|
||||
break;
|
||||
|
||||
case BUILT_IN_STACK_RESTORE:
|
||||
result = optimize_stack_restore (i);
|
||||
if (result)
|
||||
if (fold_stmt (&i))
|
||||
;
|
||||
else
|
||||
{
|
||||
tree result = NULL_TREE;
|
||||
switch (DECL_FUNCTION_CODE (callee))
|
||||
{
|
||||
case BUILT_IN_CONSTANT_P:
|
||||
/* Resolve __builtin_constant_p. If it hasn't been
|
||||
folded to integer_one_node by now, it's fairly
|
||||
certain that the value simply isn't constant. */
|
||||
result = integer_zero_node;
|
||||
break;
|
||||
gsi_next (&i);
|
||||
continue;
|
||||
|
||||
case BUILT_IN_UNREACHABLE:
|
||||
if (optimize_unreachable (i))
|
||||
cfg_changed = true;
|
||||
break;
|
||||
|
||||
case BUILT_IN_VA_START:
|
||||
case BUILT_IN_VA_END:
|
||||
case BUILT_IN_VA_COPY:
|
||||
/* These shouldn't be folded before pass_stdarg. */
|
||||
result = optimize_stdarg_builtin (stmt);
|
||||
if (result)
|
||||
case BUILT_IN_ASSUME_ALIGNED:
|
||||
/* Remove __builtin_assume_aligned. */
|
||||
result = gimple_call_arg (stmt, 0);
|
||||
break;
|
||||
/* FALLTHRU */
|
||||
|
||||
default:
|
||||
gsi_next (&i);
|
||||
continue;
|
||||
}
|
||||
case BUILT_IN_STACK_RESTORE:
|
||||
result = optimize_stack_restore (i);
|
||||
if (result)
|
||||
break;
|
||||
gsi_next (&i);
|
||||
continue;
|
||||
|
||||
if (result == NULL_TREE)
|
||||
break;
|
||||
case BUILT_IN_UNREACHABLE:
|
||||
if (optimize_unreachable (i))
|
||||
cfg_changed = true;
|
||||
break;
|
||||
|
||||
case BUILT_IN_VA_START:
|
||||
case BUILT_IN_VA_END:
|
||||
case BUILT_IN_VA_COPY:
|
||||
/* These shouldn't be folded before pass_stdarg. */
|
||||
result = optimize_stdarg_builtin (stmt);
|
||||
if (result)
|
||||
break;
|
||||
/* FALLTHRU */
|
||||
|
||||
default:;
|
||||
}
|
||||
|
||||
if (!result)
|
||||
{
|
||||
gsi_next (&i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!update_call_from_tree (&i, result))
|
||||
gimplify_and_update_call_from_tree (&i, result);
|
||||
}
|
||||
|
||||
todoflags |= TODO_update_address_taken;
|
||||
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
|
@ -2744,12 +2751,6 @@ pass_fold_builtins::execute (function *fun)
|
|||
}
|
||||
|
||||
old_stmt = stmt;
|
||||
if (!update_call_from_tree (&i, result))
|
||||
{
|
||||
gimplify_and_update_call_from_tree (&i, result);
|
||||
todoflags |= TODO_update_address_taken;
|
||||
}
|
||||
|
||||
stmt = gsi_stmt (i);
|
||||
update_stmt (stmt);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue