aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-11-15 20:43:19 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1998-11-15 20:43:19 +0000
commitde0dd9345e332148fc17daed7fd02edebf64eebb (patch)
treed48df2bc00234de62bc2655193c0c14c472d9cf8 /gcc/function.c
parent8d1d76c1e3ad0b9eb6d5dca74b9b8eca19755f9c (diff)
downloadgcc-de0dd9345e332148fc17daed7fd02edebf64eebb.zip
gcc-de0dd9345e332148fc17daed7fd02edebf64eebb.tar.gz
gcc-de0dd9345e332148fc17daed7fd02edebf64eebb.tar.bz2
function.c (purge_addressof_1): Unshare rtl created by store_bit_field.
* function.c (purge_addressof_1): Unshare rtl created by store_bit_field. From-SVN: r23670
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 44accb8..3f47848 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2918,6 +2918,8 @@ purge_addressof_1 (loc, insn, force, store)
if (store)
{
+ rtx p;
+
start_sequence ();
val = gen_reg_rtx (GET_MODE (x));
if (! validate_change (insn, loc, val, 0))
@@ -2936,6 +2938,16 @@ purge_addressof_1 (loc, insn, force, store)
val, GET_MODE_SIZE (GET_MODE (sub)),
GET_MODE_SIZE (GET_MODE (sub)));
+ /* Make sure to unshare any shared rtl that store_bit_field
+ might have created. */
+ for (p = get_insns(); p; p = NEXT_INSN (p))
+ {
+ reset_used_flags (PATTERN (p));
+ reset_used_flags (REG_NOTES (p));
+ reset_used_flags (LOG_LINKS (p));
+ }
+ unshare_all_rtl (get_insns ());
+
seq = gen_sequence ();
end_sequence ();
emit_insn_after (seq, insn);