* function.c (purge_addressof_1): Unshare rtl created by
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Nov 1998 20:43:19 +0000 (20:43 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Nov 1998 20:43:19 +0000 (20:43 +0000)
store_bit_field.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23670 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/function.c

index 808cad8..25d7e17 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 04:41:41 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * function.c (purge_addressof_1): Unshare rtl created by
+       store_bit_field.
+
 Mon Nov 16 04:23:06 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * regmove.c (regmove_optimize): Don't do anything but
index 44accb8..3f47848 100644 (file)
@@ -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);