OSDN Git Service

PR rtl-optimization/20756:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 May 2005 12:25:28 +0000 (12:25 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 May 2005 12:25:28 +0000 (12:25 +0000)
* 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.

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

gcc/ChangeLog
gcc/flow.c

index 00f3607..d11964b 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.
 2005-05-13  Adrian Straetling  <straetling@de.ibm.com>
 
        * config/s390.md: ("DBL"): New mode attribute.
index ff1d861..9eae74b 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
        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);
       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,
 
       /* 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);
              }
                  }
                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))
        }
     }
   else if (REG_P (reg))