summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-20 11:24:06 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-20 11:24:06 +0000
commit0747b42f102113391e594b84b0d70d08c2198cbc (patch)
tree4ea00e1f1ac9edfc42829aaaaaed0d9b6ed30dfa
parent63ee734c0fb9c6b1a5691176f438176ca3ebe624 (diff)
downloadgcc-0747b42f102113391e594b84b0d70d08c2198cbc.tar.gz
* tree-tailcall.c (adjust_return_value): Do not use RESULT_DECL
as temporary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120999 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-tailcall.c13
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);
}