diff options
author | Jan Hubicka <jh@suse.cz> | 2007-01-20 12:24:06 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-01-20 11:24:06 +0000 |
commit | bbba68dd6b2959722a4d6057475c3a7ef319682d (patch) | |
tree | 4ea00e1f1ac9edfc42829aaaaaed0d9b6ed30dfa /gcc | |
parent | 3a53e16539952155bef788660ea6f623de9f025d (diff) | |
download | gcc-bbba68dd6b2959722a4d6057475c3a7ef319682d.tar.gz |
tree-tailcall.c (adjust_return_value): Do not use RESULT_DECL as temporary.
* tree-tailcall.c (adjust_return_value): Do not use RESULT_DECL
as temporary.
From-SVN: r120999
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-tailcall.c | 13 |
2 files changed, 11 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 97483ccc293..a3693d9f616 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-01-20 Jan Hubicka <jh@suse.cz> + + * tree-tailcall.c (adjust_return_value): Do not use RESULT_DECL + as temporary. + 2007-01-19 Ian Lance Taylor <iant@google.com> * expmed.c (expand_divmod) [TRUNC_MOD_EXPR, TRUNC_DIV_EXPR]: Cast diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c index b5696789657..c1ca78a3f00 100644 --- a/gcc/tree-tailcall.c +++ b/gcc/tree-tailcall.c @@ -617,6 +617,7 @@ adjust_return_value (basic_block bb, tree m, tree a) { tree ret_stmt = last_stmt (bb), ret_var, var, stmt, tmp; tree ret_type = TREE_TYPE (DECL_RESULT (current_function_decl)); + tree *ret_op; block_stmt_iterator bsi = bsi_last (bb); gcc_assert (TREE_CODE (ret_stmt) == RETURN_EXPR); @@ -627,13 +628,11 @@ adjust_return_value (basic_block bb, tree m, tree a) if (TREE_CODE (ret_var) == GIMPLE_MODIFY_STMT) { - ret_var->base.ann = (tree_ann_t) stmt_ann (ret_stmt); - bsi_replace (&bsi, ret_var, true); - SSA_NAME_DEF_STMT (GIMPLE_STMT_OPERAND (ret_var, 0)) = ret_var; - ret_var = GIMPLE_STMT_OPERAND (ret_var, 0); - ret_stmt = build1 (RETURN_EXPR, TREE_TYPE (ret_stmt), ret_var); - bsi_insert_after (&bsi, ret_stmt, BSI_NEW_STMT); + ret_op = &GIMPLE_STMT_OPERAND (ret_var, 1); + ret_var = *ret_op; } + else + ret_op = &TREE_OPERAND (ret_stmt, 0); if (m) { @@ -663,7 +662,7 @@ adjust_return_value (basic_block bb, tree m, tree a) bsi_insert_before (&bsi, stmt, BSI_SAME_STMT); } - TREE_OPERAND (ret_stmt, 0) = var; + *ret_op = var; update_stmt (ret_stmt); } |