This patch enables pass_object_sizes, and corrects mishandling of
unary NOPs in get_maxval_strlen.
* builtins.c (fold_builtin_object_size):
Enable call to compute_builtin_object_size, previously
stubbed out awaiting tuplification.
* tree-ssa-ccp.c (valid_gimple_rhs_p, valid_gimple_call_p,
move_ssa_defining_stmt_for_defs, update_call_from_tree):
Deleted, moved to tree-ssa-propagate.c.
(get_maxval_strlen): Use gimple_assign_single_p.
Handle assignment with unary NOP correctly.
* tree-ssa-propagate.c (valid_gimple_rhs_p, valid_gimple_call_p,
move_ssa_defining_stmt_for_defs, update_call_from_tree):
Moved here from tree-ssa-ccp.c.
* tree-ssa-propagate.h (valid_gimple_rhs_p, valid_gimple_call_p,
move_ssa_defining_stmt_for_defs, update_call_from_tree): Declared.
* gimple-dummy.c (compute_builtin_object_size): Removed dummy.
* tree_object_size.c (addr_object_size, alloc_object_size)
Tuplified.
(pass_through_call, compute_builtin_object_size): Tuplified.
(expr_object_size): Tuplified. Some cases broken out.
(plus_expr_object_size): Deleted.
(call_object_size, unknown_object_size, plus_stmt_object_size):
New functions. Handle cases broken out from expr_object_size.
(cond_expr_object_size): Fix comment.
(collect_object_sizes_for): Tuplify.
(check_for_plus_in_loops_1, check_for_plus_in_loops): Tuplify.
(compute_object_sizes): Tuplify.
* gimple.c (gimple_assign_single_p, gimple_assign_unary_nop_p):
New functions.
* gimple.h (gimple_assign_single_p, gimple_assign_unary_nop_p):
Declare.
* passes.c (init_optimization_passes): Enable pass_object_sizes.
@@ -330,21 +328,16 @@ compute_builtin_object_size (tree ptr, i
{
gcc_assert (object_size_type >= 0 && object_size_type <= 3);
+ /* FIXME tuples. Paranoia. */
+ gcc_assert (TREE_CODE (ptr) != CALL_EXPR);
+
@@ -490,10 +481,72 @@ expr_object_size (struct object_size_inf
if (TREE_CODE (value) == ADDR_EXPR)
bytes = addr_object_size (value, object_size_type);
- else if (TREE_CODE (value) == CALL_EXPR)
- bytes = alloc_object_size (value, object_size_type);
else
- bytes = unknown[object_size_type];
+ {
+ /* FIXME tuples. Paranoia. */
+ gcc_assert (TREE_CODE (value) != CALL_EXPR
+ && TREE_CODE (value) != POINTER_PLUS_EXPR);