OSDN Git Service

* reload1.c (emit_reload_insns): When rewriting the SET_DEST of a
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 1998 19:22:36 +0000 (19:22 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 1998 19:22:36 +0000 (19:22 +0000)
        previous insn to store directly into our reload register, make sure
        that if the source of the previous insn is a reload register, its
        spill_reg_store and spill_reg_stored_to values are cleared.

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

gcc/ChangeLog
gcc/reload1.c

index 87c79fe..1c94751 100644 (file)
@@ -1,3 +1,10 @@
+Fri Nov  6 20:15:19 1998  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+       * reload1.c (emit_reload_insns):  When rewriting the SET_DEST of a
+       previous insn to store directly into our reload register, make sure
+       that if the source of the previous insn is a reload register, its
+       spill_reg_store and spill_reg_stored_to values are cleared.
+
 Fri Nov  6 16:35:10 1998  David Edelsohn  <edelsohn@mhpcc.edu>
 
        * rs6000.md (floatunssidf2_internal splitter): Use base register
index 685d783..ce574a1 100644 (file)
@@ -6774,6 +6774,18 @@ emit_reload_insns (chain)
                {
                  /* Store into the reload register instead of the pseudo.  */
                  SET_DEST (PATTERN (temp)) = reloadreg;
+
+                 /* If the previous insn is an output reload, the source is
+                    a reload register, and its spill_reg_store entry will
+                    contain the previous destination.  This is now
+                    invalid.  */
+                 if (GET_CODE (SET_SRC (PATTERN (temp))) == REG
+                     && REGNO (SET_SRC (PATTERN (temp))) < FIRST_PSEUDO_REGISTER)
+                   {
+                     spill_reg_store[REGNO (SET_SRC (PATTERN (temp)))] = 0;
+                     spill_reg_stored_to[REGNO (SET_SRC (PATTERN (temp)))] = 0;
+                   }
+
                  /* If these are the only uses of the pseudo reg,
                     pretend for GDB it lives in the reload reg we used.  */
                  if (REG_N_DEATHS (REGNO (old)) == 1