rtl.h (shallow_copy_rtx): Declare.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Mon, 22 Mar 1999 13:11:31 +0000 (13:11 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 22 Mar 1999 13:11:31 +0000 (13:11 +0000)
* rtl.h (shallow_copy_rtx): Declare.
* rtl.c (shallow_copy_rtx): New function.
* reload.c (find_reloads_toplev): Use shallow_copy_rtx instead of
copy_rtx.

From-SVN: r25897

gcc/ChangeLog
gcc/reload.c
gcc/rtl.c
gcc/rtl.h

index 70fbc03ef46fbb2df49d8ac717f388fa7b818e6e..b44745a34146c59ffdc8a9e1fee5166215e32271 100644 (file)
@@ -1,3 +1,10 @@
+Mon Mar 22 21:08:59 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * rtl.h (shallow_copy_rtx): Declare.
+       * rtl.c (shallow_copy_rtx): New function.
+       * reload.c (find_reloads_toplev): Use shallow_copy_rtx instead of
+       copy_rtx.
+
 Mon Mar 22 10:44:33 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>
 
        * config/h8300/h8300.md (adjust_length): New attribute.
index 8ba0621068d1adfaefa629f18d8baab66fe50c89..a68f2efa661b6de13b1b01da3152d325c91179f6 100644 (file)
@@ -4517,7 +4517,7 @@ find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, insn)
             not to do the change.  */
          if (new_part != XEXP (x, i) && ! CONSTANT_P (new_part) && ! copied)
            {
-             x = copy_rtx (x);
+             x = shallow_copy_rtx (x);
              copied = 1;
            }
          XEXP (x, i) = new_part;
index ae474d08bf1fb56d81cf8302f8e78bc913746a01..6b04bcd82d5da4d60f98b419d6a01f19ea5f31be 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -488,6 +488,28 @@ copy_most_rtx (orig, may_share)
     }
   return copy;
 }
+
+/* Create a new copy of an rtx.  Only copy just one level.  */
+rtx
+shallow_copy_rtx (orig)
+     rtx orig;
+{
+  register int i;
+  register char *format_ptr;
+  register RTX_CODE code = GET_CODE (orig);
+  register rtx copy = rtx_alloc (code);
+
+  PUT_MODE (copy, GET_MODE (orig));
+  copy->in_struct = orig->in_struct;
+  copy->volatil = orig->volatil;
+  copy->unchanging = orig->unchanging;
+  copy->integrated = orig->integrated;
+
+  for (i = 0; i < GET_RTX_LENGTH (code); i++)
+    copy->fld[i] = orig->fld[i];
+
+  return copy;
+}
 \f
 /* Subroutines of read_rtx.  */
 
index 249792bbde56afdc3c1f61aa438a88d428d126b0..c1bd86ed8e406e12b7175b5fca35f47ba55a7d35 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -889,6 +889,7 @@ extern rtvec rtvec_alloc            PROTO((int));
 extern rtx copy_rtx                    PROTO((rtx));
 extern rtx copy_rtx_if_shared          PROTO((rtx));
 extern rtx copy_most_rtx               PROTO((rtx, rtx));
+extern rtx shallow_copy_rtx            PROTO((rtx));
 extern rtvec gen_rtvec_v               PROTO((int, rtx *));
 extern rtvec gen_rtvec_vv              PROTO((int, rtunion *));
 extern rtx gen_reg_rtx                 PROTO((enum machine_mode));