diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1999-03-22 13:11:31 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1999-03-22 13:11:31 +0000 |
commit | ce9d4c6d80126b0d4549e80ddd92bfab017d22f4 (patch) | |
tree | 3dc71ee0033d2efbf9c8a4e8c88dd81a231e3a57 | |
parent | d3c29f99efaa2162cc444dc66c8c488f31dfa88d (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/reload.c | 2 | ||||
-rw-r--r-- | gcc/rtl.c | 22 | ||||
-rw-r--r-- | gcc/rtl.h | 1 |
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; @@ -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. */ @@ -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)); |