* flow.c (new_insn_dead_notes): Don't early out for preexisting regs.
authorRichard Henderson <rth@cygnus.com>
Wed, 8 Sep 1999 23:42:18 +0000 (16:42 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 8 Sep 1999 23:42:18 +0000 (16:42 -0700)
From-SVN: r29217

gcc/ChangeLog
gcc/flow.c

index abf78065e55a416e71a43e0be8159abc8efae987..8f47f954e4b5033c597fcbf6f549d09331dad61d 100644 (file)
@@ -1,3 +1,7 @@
+Wed Sep  8 16:41:27 1999  Richard Henderson  <rth@cygnus.com>
+
+       * flow.c (new_insn_dead_notes): Don't early out for preexisting regs.
+
 Wed Sep  8 16:07:52 1999  Richard Henderson  <rth@cygnus.com>
 
        * gengenrtl.c (CONST_DOUBLE_FORMAT): Take the size REAL_ARITHMETIC 
index 60be87a5c01b338d16b4486c9c76e6175d69883f..bd42a56bc5b3ac05c4c06177f2a257d5843149f0 100644 (file)
@@ -5351,6 +5351,7 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn)
 
   if (GET_CODE (dest) == REG)
     {
+#if 0
       /* If the original insns already used this register, we may not
          add new notes for it.  One example for a replacement that
          needs this test is when a multi-word memory access with
@@ -5370,6 +5371,17 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn)
         REG_DEAD notes. This can probably be accurately done by
         calling mark_referenced_resources() on the old stream before
         replacing the old insns.  */
+      /* ??? The conclusion reached here -- that we can't add DEAD notes
+        when the register is preexisting -- is false.  I can't envision
+        a sequence postulated above that wouldn't be properly handled
+        by the code below.  In the meantime, consider the 1->2 split
+
+           (set (reg:SI 100) (ne:SI (reg:SI 100) (const_int 0)))
+        to
+           (set (reg:CC icc) (compare:CC (reg:SI 100) (const_int 0)))
+           (set (reg:SI 100) (ne:SI (reg:CC icc) (const_int 0)))
+
+        We do in fact need a new DEAD note on the first insn for reg 100.  */
 
       for (tem = orig_first_insn; tem != NULL_RTX; tem = NEXT_INSN (tem))
        {
@@ -5379,6 +5391,7 @@ new_insn_dead_notes (pat, insn, first, last, orig_first_insn, orig_last_insn)
          if (tem == orig_last_insn)
            break;
        }
+#endif
 
       /* So it's a new register, presumably only used within this
         group of insns. Find the last insn in the set of new insns