integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc.
authorJim Wilson <wilson@cygnus.com>
Sat, 25 Oct 1997 00:50:35 +0000 (00:50 +0000)
committerBrendan Kehoe <brendan@gcc.gnu.org>
Sat, 25 Oct 1997 00:50:35 +0000 (20:50 -0400)
* integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc.

fixes many of the inlining problems causing various suite++ and perennial
test failures, among others

From-SVN: r16171

gcc/ChangeLog
gcc/integrate.c

index d26d46476a86272c7c2bf71a0ba206fd949f54a3..37fc943a0cf011a292ab0d1b189636f23c910044 100644 (file)
@@ -1,3 +1,7 @@
+Fri Oct 24 17:49:10 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc.
+
 Fri Oct 24 17:40:34 1997  Jeffrey A Law  (law@cygnus.com)
 
        * mn10200.c (indirect_memory_operand): Delete unused function.
index 27aa4df6ebf0e3f521bf86b5e5666249f6b9e340..c62905009cbf93a8fc19fa7002016ea43471d2f0 100644 (file)
@@ -413,6 +413,7 @@ save_for_inline_copying (fndecl)
   int max_uid;
   rtx first_nonparm_insn;
   char *new, *new1;
+  rtx *new2;
 
   /* Make and emit a return-label if we have not already done so. 
      Do this before recording the bounds on label numbers.  */
@@ -538,6 +539,16 @@ save_for_inline_copying (fndecl)
       XEXP (regno_reg_rtx[i], 0)
        = copy_for_inline (XEXP (regno_reg_rtx[i], 0));
 
+  /* Copy the parm_reg_stack_loc array, and substitute for all of the rtx
+     contained in it.  */
+  new2 = savealloc (max_parm_reg * sizeof (rtx));
+  bcopy ((char *) parm_reg_stack_loc, (char *) new2,
+        max_parm_reg * sizeof (rtx));
+  parm_reg_stack_loc = new2;
+  for (i = LAST_VIRTUAL_REGISTER + 1; i < max_parm_reg; ++i)
+    if (parm_reg_stack_loc[i])
+      parm_reg_stack_loc[i] = copy_for_inline (parm_reg_stack_loc[i]);
+
   /* Copy the tree of subblocks of the function, and the decls in them.
      We will use the copy for compiling this function, then restore the original
      subblocks and decls for use when inlining this function.