aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1999-03-22 13:11:31 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1999-03-22 13:11:31 +0000
commitce9d4c6d80126b0d4549e80ddd92bfab017d22f4 (patch)
tree3dc71ee0033d2efbf9c8a4e8c88dd81a231e3a57
parentd3c29f99efaa2162cc444dc66c8c488f31dfa88d (diff)
downloadgcc-ce9d4c6d80126b0d4549e80ddd92bfab017d22f4.zip
gcc-ce9d4c6d80126b0d4549e80ddd92bfab017d22f4.tar.gz
gcc-ce9d4c6d80126b0d4549e80ddd92bfab017d22f4.tar.bz2
rtl.h (shallow_copy_rtx): Declare.
* 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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reload.c2
-rw-r--r--gcc/rtl.c22
-rw-r--r--gcc/rtl.h1
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 70fbc03..b44745a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/reload.c b/gcc/reload.c
index 8ba0621..a68f2ef 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -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;
diff --git a/gcc/rtl.c b/gcc/rtl.c
index ae474d0..6b04bcd 100644
--- 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;
+}
/* Subroutines of read_rtx. */
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 249792b..c1bd86e 100644
--- 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));