flow.c (verify_local_live_at_start): Back out last change.
authorJ"orn Rennecke <amylaar@redhat.com>
Tue, 7 Nov 2000 06:28:34 +0000 (06:28 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 7 Nov 2000 06:28:34 +0000 (06:28 +0000)
* flow.c (verify_local_live_at_start): Back out last change.
* combine.c (distribute_notes): When parts of a hard reg are
neither set nor referenced in PLACE, search backwards for a
place to put a REG_UNUSED note; if none found, ask for flow
info refresh.

From-SVN: r37284

gcc/ChangeLog
gcc/combine.c
gcc/flow.c

index 0bf70491b0946cc6e25c49c7116fd3c45a893629..ec6df704f7133cd126580353489a3e777ab58004 100644 (file)
@@ -1,3 +1,11 @@
+Tue Nov  7 06:24:02 2000  J"orn Rennecke <amylaar@redhat.com>
+
+       * flow.c (verify_local_live_at_start): Back out last change.
+       * combine.c (distribute_notes): When parts of a hard reg are
+       neither set nor referenced in PLACE, search backwards for a
+       place to put a REG_UNUSED note; if none found, ask for flow
+       info refresh.
+
 Mon Nov  6 20:08:13 2000  J"orn Rennecke <amylaar@redhat.com>
 
        * reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL
index 215644037491c091841e570c849bc99e9c3399e7..33de90c4988fd8f1cc9119b6b9b81115fa11cc0a 100644 (file)
@@ -12499,6 +12499,7 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
                           i += HARD_REGNO_NREGS (i, reg_raw_mode[i]))
                        {
                          rtx piece = gen_rtx_REG (reg_raw_mode[i], i);
+                         basic_block bb = BASIC_BLOCK (this_basic_block);
 
                          if (! dead_or_set_p (place, piece)
                              && ! reg_bitfield_target_p (piece,
@@ -12510,6 +12511,34 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
                              distribute_notes (new_note, place, place,
                                                NULL_RTX, NULL_RTX, NULL_RTX);
                            }
+                         else if (! refers_to_regno_p (i, i + 1,
+                                                       PATTERN (place), 0)
+                                  && ! find_regno_fusage (place, USE, i))
+                           for (tem = PREV_INSN (place); ;
+                                tem = PREV_INSN (tem))
+                             {
+                               if (! INSN_P (tem))
+                                 {
+                                   if (tem == bb->head)
+                                     {
+                                       SET_BIT (refresh_blocks,
+                                                this_basic_block);
+                                       need_refresh = 1;
+                                       break;
+                                     }
+                                   continue;
+                                 }
+                               if (dead_or_set_p (tem, piece)
+                                   || reg_bitfield_target_p (piece,
+                                                             PATTERN (tem)))
+                                 {
+                                   REG_NOTES (tem)
+                                     = gen_rtx_EXPR_LIST (REG_DEAD, piece,
+                                                          REG_NOTES (tem));
+                                   break;
+                                 }
+                             }
+
                        }
 
                      place = 0;
index a48accf89d45edc48556d45aa6dee79ede3435cf..d286f91e2b3465695012a9bb1e6dceda3ffa8579 100644 (file)
@@ -2888,24 +2888,11 @@ verify_local_live_at_start (new_live_at_start, bb)
 
       EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i,
        {
-          /* No pseudo registers should die.  */
+          /* No registers should die.  */
          if (REGNO_REG_SET_P (bb->global_live_at_start, i))
-           {
-             /* But hard regs can reasonably die, e.g. when we combine
-                (insn 6 30 7 (set (reg/v:DI 83)
-                                  (reg:DI 5 r5)) (nil)
-                    (expr_list:REG_DEAD (reg:DI 5 r5) (nil)))
-                ... and ...
-                (insn 17 15 18 (set (reg:SI 5 r5)
-                               (subreg:SI (reg/v:DI 83) 1)) (insn_list 6 (nil))
-                    (expr_list:REG_DEAD (reg/v:DI 83) (nil))) .  */
-
-             if (i >= FIRST_PSEUDO_REGISTER)
-               abort ();
-           }
-         else
-           /* Verify that the now-live register is wider than word_mode.  */
-           verify_wide_reg (i, bb->head, bb->end);
+           abort ();
+          /* Verify that the now-live register is wider than word_mode.  */
+         verify_wide_reg (i, bb->head, bb->end);
        });
     }
 }