* reorg.c (fill_slots_from_thread): After call to
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Sep 2001 22:25:05 +0000 (22:25 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Sep 2001 22:25:05 +0000 (22:25 +0000)
steal_delay_list_from_target, update own_thread as new_thread may
have branched.

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

gcc/ChangeLog
gcc/reorg.c

index 4834001..aeb7d7e 100644 (file)
@@ -1,3 +1,9 @@
+2001-09-15  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * reorg.c (fill_slots_from_thread): After call to
+       steal_delay_list_from_target, update own_thread as new_thread may
+       have branched.
+
 2001-09-14  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * cpperror.c (print_location): Take line and column, for
index 5cff4b3..2039945 100644 (file)
@@ -2800,12 +2800,18 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
       /* If this is the `true' thread, we will want to follow the jump,
         so we can only do this if we have taken everything up to here.  */
       if (thread_if_true && trial == new_thread)
-       delay_list
-         = steal_delay_list_from_target (insn, condition, PATTERN (trial),
-                                         delay_list, &set, &needed,
-                                         &opposite_needed, slots_to_fill,
-                                         pslots_filled, &must_annul,
-                                         &new_thread);
+       {
+         delay_list
+           = steal_delay_list_from_target (insn, condition, PATTERN (trial),
+                                           delay_list, &set, &needed,
+                                           &opposite_needed, slots_to_fill,
+                                           pslots_filled, &must_annul,
+                                           &new_thread);
+         /* If we owned the thread and are told that it branched
+            elsewhere, make sure we own the thread at the new location.  */
+         if (own_thread && trial != new_thread)
+           own_thread = own_thread_p (new_thread, new_thread, 0);
+       }
       else if (! thread_if_true)
        delay_list
          = steal_delay_list_from_fallthrough (insn, condition,