egcs-2.92.02 19980905 (m68k-next-nextstep3): Address of hoisted load clobbered
Joern Rennecke
amylaar@cygnus.co.uk
Wed Sep 9 22:55:00 GMT 1998
> * loop.c (load_mems): Copy rtx for output mem.
>
> Index: loop.c
> ===================================================================
> RCS file: /egcs/carton/cvsfiles/egcs/gcc/loop.c,v
> retrieving revision 1.74
> diff -c -p -d -u -r1.74 loop.c
> --- loop.c 1998/09/04 10:37:49 1.74
> +++ loop.c 1998/09/09 07:46:32
> @@ -8802,7 +8802,7 @@ load_mems (scan_start, end, loop_top, st
>
> /* Store the memory immediately after END, which is
> the NOTE_LOOP_END. */
> - set = gen_rtx_SET (GET_MODE (reg), mem, reg);
> + set = gen_rtx_SET (GET_MODE (reg), copy_rtx (mem), reg);
> emit_insn_after (set, label);
> }
>
> But I'm unclear on the rules of shared rtl. I would have thought
> that would have had to handle something like this already.
No, memory expressions may not be shared.
We indeed use copy_rtx and change_address in lots of places to avoid sharing
of MEMs.
For a primer on what may and what may not be shared, look at unshare_all_rtl .
So your patch seems to make sense to me.
More information about the Gcc
mailing list