summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-operands.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-16 21:13:08 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-16 21:13:08 +0000
commit80f0648113a67e5f40ab1c19bed50d37262dbfdf (patch)
treea6887d7a4c296d5e39f29a2367845311f7100e89 /gcc/tree-ssa-operands.c
parent88a09153515cca1388a7284174c5ff5ae4b93cb0 (diff)
downloadgcc-80f0648113a67e5f40ab1c19bed50d37262dbfdf.tar.gz
* tree-def (WITH_SIZE_EXPR): New.
* explow.c (expr_size, int_expr_size): Handle WITH_SIZE_EXPR. * expr.c (expand_expr_real_1): Likewise. * gimplify.c (maybe_with_size_expr): New. (gimplify_arg, gimplify_modify_expr): Use it. (gimplify_modify_expr_to_memcpy): Take size parameter. (gimplify_modify_expr_to_memset): Likewise. (gimplify_expr): Handle WITH_SIZE_EXPR. * tree-alias-common.c (find_func_aliases): Likewise. * tree-eh.c (tree_could_trap_p): Likewise. (tree_could_throw_p): Likewise. * tree-gimple.c (is_gimple_lvalue): Likewise. (get_call_expr_in): Likewise. * tree-inline.c (estimate_num_insns_1): Likewise. (expand_calls_inline): Likewise. * tree-nested.c (convert_call_expr): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-sra.c (sra_walk_expr): Likewise. * tree-ssa-alias.c (add_pointed_to_expr): Likewise. * tree-ssa-ccp.c (get_rhs, set_rhs): Likewise. * tree-ssa-operands.c (get_expr_operands): Likewise. * tree-tailcall.c (find_tail_calls): Likewise. * calls.c (expand_call): Reset old_stack_allocated after calling emit_stack_restore. * gcc.c-torture/compile/20020210-1.c: Remove XFAIL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84833 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-operands.c')
-rw-r--r--gcc/tree-ssa-operands.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index af21f12a415..bb60bd87332 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -931,23 +931,38 @@ get_expr_operands (tree stmt, tree *expr_p, int flags, voperands_t prev_vops)
get_expr_operands (stmt, &TREE_OPERAND (expr, 2), opf_none, prev_vops);
return;
+ case WITH_SIZE_EXPR:
+ /* WITH_SIZE_EXPR is a pass-through reference to it's first argument,
+ and an rvalue reference to its second argument. */
+ get_expr_operands (stmt, &TREE_OPERAND (expr, 1), opf_none, prev_vops);
+ get_expr_operands (stmt, &TREE_OPERAND (expr, 0), flags, prev_vops);
+ return;
+
case CALL_EXPR:
get_call_expr_operands (stmt, expr, prev_vops);
return;
case MODIFY_EXPR:
- get_expr_operands (stmt, &TREE_OPERAND (expr, 1), opf_none, prev_vops);
+ {
+ int subflags;
+ tree op;
+
+ get_expr_operands (stmt, &TREE_OPERAND (expr, 1), opf_none, prev_vops);
+
+ op = TREE_OPERAND (expr, 0);
+ if (TREE_CODE (op) == WITH_SIZE_EXPR)
+ op = TREE_OPERAND (expr, 0);
+ if (TREE_CODE (op) == ARRAY_REF
+ || TREE_CODE (op) == COMPONENT_REF
+ || TREE_CODE (op) == REALPART_EXPR
+ || TREE_CODE (op) == IMAGPART_EXPR)
+ subflags = opf_is_def;
+ else
+ subflags = opf_is_def | opf_kill_def;
- if (TREE_CODE (TREE_OPERAND (expr, 0)) == ARRAY_REF
- || TREE_CODE (TREE_OPERAND (expr, 0)) == COMPONENT_REF
- || TREE_CODE (TREE_OPERAND (expr, 0)) == REALPART_EXPR
- || TREE_CODE (TREE_OPERAND (expr, 0)) == IMAGPART_EXPR)
- get_expr_operands (stmt, &TREE_OPERAND (expr, 0), opf_is_def,
- prev_vops);
- else
- get_expr_operands (stmt, &TREE_OPERAND (expr, 0),
- opf_is_def | opf_kill_def, prev_vops);
- return;
+ get_expr_operands (stmt, &TREE_OPERAND (expr, 0), subflags, prev_vops);
+ return;
+ }
case VA_ARG_EXPR:
/* Mark VA_ARG_EXPR nodes as making volatile references. FIXME,