aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zack@gcc.gnu.org>2004-08-11 06:28:00 +0000
committerZack Weinberg <zack@gcc.gnu.org>2004-08-11 06:28:00 +0000
commit6f4a43e029d1e36130a9ff55128a1d101cf32ec5 (patch)
tree89b4cb40824a7b6f34fb1a33c8593dbfdf639b5e
parent1a186ec5586436555a30227776d75c2516fd5911 (diff)
downloadgcc-6f4a43e029d1e36130a9ff55128a1d101cf32ec5.zip
gcc-6f4a43e029d1e36130a9ff55128a1d101cf32ec5.tar.gz
gcc-6f4a43e029d1e36130a9ff55128a1d101cf32ec5.tar.bz2
stmt.c (expand_return): If asked to return the RESULT_DECL, just call expand_value_return on result_rtl.
* stmt.c (expand_return): If asked to return the RESULT_DECL, just call expand_value_return on result_rtl. From-SVN: r85795
-rw-r--r--gcc/ChangeLog19
-rw-r--r--gcc/stmt.c13
2 files changed, 20 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ffa4aee..b0c3d9c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-10 Zack Weinberg <zack@codesourcery.com>
+
+ * stmt.c (expand_return): If asked to return the RESULT_DECL,
+ just call expand_value_return on result_rtl.
+
2004-08-10 Richard Henderson <rth@redhat.com>
* builtins.def (BUILT_IN_STACK_ALLOC): Remove.
@@ -107,7 +112,7 @@
* config/arm/t-bpabi: New file.
* doc/tm.texi (TARGET_LIBGCC_FUNCS): New entry.
(TARGET_LIB_INT_CMP_BIASED): Likewise.
-
+
2004-08-10 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000-protos.h (expand_block_clear): Declare.
@@ -121,7 +126,7 @@
* varasm.c (unlikely_section_label): New global variable.
(unlikely_text_section_name): New global variable.
(text_section): Remove alignment statement.
- (unlikely_text_section): Remove alignment statement; use
+ (unlikely_text_section): Remove alignment statement; use
unlikely_section_label rather than hard-coded string.
(assemble_start_function): Initialize unlikely_section_label and
unlikely_text_section_name; make sure cold section is properly
@@ -138,7 +143,7 @@
("*tmqi_mem"): Remove SUBREG from pattern.
("*anddi3_cconly"): Prevent accidentally matching TM pattern.
("*andsi3_cconly"): Likewise.
-
+
2004-08-10 H.J. Lu <hongjiu.lu@intel.com>
PR target/16909
@@ -171,9 +176,9 @@
* tree-cfg.c (bsi_insert_before, bsi_insert_after): Call modify_stmt
after linking stmt into the program.
(bsi_remove): Don't call modify_stmt.
- * tree-complex.c (update_complex_assignment,
+ * tree-complex.c (update_complex_assignment,
expand_complex_comparison): Call modify_stmt after changing the stmt.
- * tree-outof-ssa.c (rewrite_trees): Call modify_stmt only if not
+ * tree-outof-ssa.c (rewrite_trees): Call modify_stmt only if not
removing the stmt.
* tree-ssa-ccp.c (substitute_and_fold): Call modify_stmt after changing
the stmt, and only if needed.
@@ -182,14 +187,14 @@
(simplify_rhs_and_lookup_avail_expr): Don't take an annotation param.
(simplify_cond_and_lookup_avail_expr): Use modify_stmt.
(simplify_switch_and_lookup_avail_expr): Don't take an annotation param.
- (eliminate_redundant_computations): Don't pass an annotation. Call
+ (eliminate_redundant_computations): Don't pass an annotation. Call
modify_stmt rather than setting the annotation directly.
(record_equivalences_from_stmt): Remove unused local 'j'.
(cprop_operand): Take a stmt rather than an annotation as a parameter.
Call modify_stmt.
(cprop_into_stmt): Pass stmt rather than annotation.
(update_rhs_and_lookup_avail_expr): Call modify_stmt.
- * tree-ssa-loop-im.c (schedule_sm): Call get_stmt_ann rather than
+ * tree-ssa-loop-im.c (schedule_sm): Call get_stmt_ann rather than
modify_stmt.
* tree-ssa.c (propagate_into_addr): Dont call modify_stmt.
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 86d4fe9..9425cff 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1635,8 +1635,6 @@ expand_return (tree retval)
expand_null_return ();
return;
}
- else if (TREE_CODE (retval) == RESULT_DECL)
- retval_rhs = retval;
else if ((TREE_CODE (retval) == MODIFY_EXPR
|| TREE_CODE (retval) == INIT_EXPR)
&& TREE_CODE (TREE_OPERAND (retval, 0)) == RESULT_DECL)
@@ -1646,6 +1644,11 @@ expand_return (tree retval)
result_rtl = DECL_RTL (DECL_RESULT (current_function_decl));
+ /* If we are returning the RESULT_DECL, then the value has already
+ been stored into it, so we don't have to do anything special. */
+ if (TREE_CODE (retval_rhs) == RESULT_DECL)
+ expand_value_return (result_rtl);
+
/* If the result is an aggregate that is being returned in one (or more)
registers, load the registers here. The compiler currently can't handle
copying a BLKmode value into registers. We could put this code in a
@@ -1653,9 +1656,9 @@ expand_return (tree retval)
call/return), but until this feature is generally usable it is kept here
(and in expand_call). */
- if (retval_rhs != 0
- && TYPE_MODE (TREE_TYPE (retval_rhs)) == BLKmode
- && REG_P (result_rtl))
+ else if (retval_rhs != 0
+ && TYPE_MODE (TREE_TYPE (retval_rhs)) == BLKmode
+ && REG_P (result_rtl))
{
int i;
unsigned HOST_WIDE_INT bitpos, xbitpos;