]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/20756 (Clobbers of deleted insns are processed, but left out)
authorJ"orn Rennecke <joern.rennecke@st.com>
Fri, 13 May 2005 12:25:28 +0000 (12:25 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 13 May 2005 12:25:28 +0000 (13:25 +0100)
PR rtl-optimization/20756:
* basic-block.h (PROP_DEAD_INSN): Define.
* flow.c (propagate_one_insn): Set during mark_set_regs call
for a dead insn.
(mark_set_1): Emit a clobber when we are about to delete a dead insn
that kills a live register.

From-SVN: r99655

gcc/ChangeLog
gcc/flow.c

index 00f3607a13f8e5571fa52e4a58a4c7437d984dbf..d11964b54809050693e0edc19a70e19cab67233e 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-13  J"orn Rennecke <joern.rennecke@st.com>
+
+       PR rtl-optimization/20756:
+       * basic-block.h (PROP_DEAD_INSN): Define.
+       * flow.c (propagate_one_insn): Set during mark_set_regs call
+       for a dead insn.
+       (mark_set_1): Emit a clobber when we are about to delete a dead insn
+       that kills a live register.
+
 2005-05-13  Adrian Straetling  <straetling@de.ibm.com>
 
        * config/s390.md: ("DBL"): New mode attribute.
index ff1d861dbe525c967adb9026a0611d29cfac6df0..9eae74b4ad0fce3c86fbcf11246c1bdf32cd2147 100644 (file)
@@ -1692,8 +1692,12 @@ propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
        fatal_insn ("Attempt to delete prologue/epilogue insn:", insn);
 
       /* Record sets.  Do this even for dead instructions, since they
-        would have killed the values if they hadn't been deleted.  */
+        would have killed the values if they hadn't been deleted.  To
+        be consistent, we also have to emit a clobber when we delete
+        an insn that clobbers a live register.  */
+      pbi->flags |= PROP_DEAD_INSN;
       mark_set_regs (pbi, PATTERN (insn), insn);
+      pbi->flags &= ~PROP_DEAD_INSN;
 
       /* CC0 is now known to be dead.  Either this insn used it,
         in which case it doesn't anymore, or clobbered it,
@@ -2960,6 +2964,8 @@ mark_set_1 (struct propagate_block_info *pbi, enum rtx_code code, rtx reg, rtx c
                  }
                CLEAR_REGNO_REG_SET (pbi->reg_live, i);
              }
+         if (flags & PROP_DEAD_INSN)
+           emit_insn_after (gen_rtx_CLOBBER (VOIDmode, reg), insn);
        }
     }
   else if (REG_P (reg))