aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2001-01-06 09:06:13 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2001-01-06 09:06:13 +0000
commitea55fa7ab15a88d60f3156c4ee22151da15cc8aa (patch)
treee37f7c301b8f45e7141c78fb72e53cdc1971b17a
parent3cccebf27b192fff321cf110d8b4cc37570ad102 (diff)
downloadgcc-ea55fa7ab15a88d60f3156c4ee22151da15cc8aa.zip
gcc-ea55fa7ab15a88d60f3156c4ee22151da15cc8aa.tar.gz
gcc-ea55fa7ab15a88d60f3156c4ee22151da15cc8aa.tar.bz2
integrate.c (copy_rtx_and_substitute): When copying an ignored return value, strip REG_FUNCTION_VALUE_P.
* integrate.c (copy_rtx_and_substitute): When copying an ignored return value, strip REG_FUNCTION_VALUE_P. From-SVN: r38747
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/integrate.c15
2 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8b075d3..d28f9b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jan 6 00:09:34 2001 J"orn Rennecke <amylaar@redhat.com>
+
+ * integrate.c (copy_rtx_and_substitute): When copying
+ an ignored return value, strip REG_FUNCTION_VALUE_P.
+
2001-01-06 Michael Hayes <mhayes@redhat.com>
* loop.c (debug_biv, debug_giv): New.
diff --git a/gcc/integrate.c b/gcc/integrate.c
index f6e4302..9859a02 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1844,9 +1844,18 @@ copy_rtx_and_substitute (orig, map, for_lhs)
the function doesn't have a return value, error. If the
mode doesn't agree, and it ain't BLKmode, make a SUBREG. */
if (map->inline_target == 0)
- /* Must be unrolling loops or replicating code if we
- reach here, so return the register unchanged. */
- return orig;
+ {
+ if (rtx_equal_function_value_matters)
+ /* This is an ignored return value. We must not
+ leave it in with REG_FUNCTION_VALUE_P set, since
+ that would confuse subsequent inlining of the
+ current function into a later function. */
+ return gen_rtx_REG (GET_MODE (orig), regno);
+ else
+ /* Must be unrolling loops or replicating code if we
+ reach here, so return the register unchanged. */
+ return orig;
+ }
else if (GET_MODE (map->inline_target) != BLKmode
&& mode != GET_MODE (map->inline_target))
return gen_lowpart (mode, map->inline_target);