diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-11-15 20:43:19 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1998-11-15 20:43:19 +0000 |
commit | de0dd9345e332148fc17daed7fd02edebf64eebb (patch) | |
tree | d48df2bc00234de62bc2655193c0c14c472d9cf8 /gcc/function.c | |
parent | 8d1d76c1e3ad0b9eb6d5dca74b9b8eca19755f9c (diff) | |
download | gcc-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.c | 12 |
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); |