integrate.c (copy_rtx_and_substitute): When copying an ignored return value, strip...
authorJ"orn Rennecke <amylaar@redhat.com>
Sat, 6 Jan 2001 09:06:13 +0000 (09:06 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Sat, 6 Jan 2001 09:06:13 +0000 (09:06 +0000)
* integrate.c (copy_rtx_and_substitute): When copying
an ignored return value, strip REG_FUNCTION_VALUE_P.

From-SVN: r38747

gcc/ChangeLog
gcc/integrate.c

index 8b075d3deb70bb970b3b985d466598cc194043d0..d28f9b8f3130c3fa9e038bc97f7e8eb0c3311671 100644 (file)
@@ -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.
index f6e43027580d3f23c94dd4db1ddb33d271f22cff..9859a02c9eb3ef0358379ac75130659a3bba736c 100644 (file)
@@ -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);