shallow_copy_rtx patch applied to rtl.h / rtl.c / reload.c
Joern Rennecke
amylaar@cygnus.co.uk
Mon Mar 22 13:14:00 GMT 1999
Reviewed by Jim Wilson.
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.
Index: rtl.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/rtl.h,v
retrieving revision 1.92
diff -p -r1.92 rtl.h
*** rtl.h 1999/03/16 15:49:28 1.92
--- rtl.h 1999/03/18 20:25:47
*************** extern rtvec rtvec_alloc PROTO((int));
*** 889,894 ****
--- 889,895 ----
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));
Index: rtl.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/rtl.c,v
retrieving revision 1.28
diff -p -r1.28 rtl.c
*** rtl.c 1999/02/25 23:45:33 1.28
--- rtl.c 1999/03/18 20:25:47
*************** copy_most_rtx (orig, may_share)
*** 488,493 ****
--- 488,515 ----
}
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. */
Index: reload.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/reload.c,v
retrieving revision 1.70
diff -p -r1.70 reload.c
*** reload.c 1999/03/18 11:12:01 1.70
--- reload.c 1999/03/18 20:25:49
*************** find_reloads_toplev (x, opnum, type, ind
*** 4517,4523 ****
not to do the change. */
if (new_part != XEXP (x, i) && ! CONSTANT_P (new_part) && ! copied)
{
! x = copy_rtx (x);
copied = 1;
}
XEXP (x, i) = new_part;
--- 4517,4523 ----
not to do the change. */
if (new_part != XEXP (x, i) && ! CONSTANT_P (new_part) && ! copied)
{
! x = shallow_copy_rtx (x);
copied = 1;
}
XEXP (x, i) = new_part;
More information about the Gcc-patches
mailing list