(redundant_insn): If INSN or possible match has REG_UNUSED note, don't
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 2 Jul 1997 03:25:39 +0000 (23:25 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 2 Jul 1997 03:25:39 +0000 (23:25 -0400)
have match.

From-SVN: r14370

gcc/reorg.c

index 5f24cfc200c6e19e30d32fec0dd5d5021adcabc5..77279f9d812ff7a2c5dcdde45d4bfc2a2ee6aa56 100644 (file)
@@ -1997,6 +1997,11 @@ redundant_insn (insn, target, delay_list)
   struct resources needed, set;
   int i;
 
+  /* If INSN has any REG_UNUSED notes, it can't match anything since we
+     are allowed to not actually assign to such a register.  */
+  if (find_reg_note (insn, REG_UNUSED, NULL_RTX) != 0)
+    return 0;
+
   /* Scan backwards looking for a match.  */
   for (trial = PREV_INSN (target); trial; trial = PREV_INSN (trial))
     {
@@ -2035,7 +2040,8 @@ redundant_insn (insn, target, delay_list)
             resource requirements as we go.  */
          for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
            if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-               && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat))
+               && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat)
+               && ! find_reg_note (XVECEXP (pat, 0, i), REG_UNUSED, NULL_RTX))
              break;
 
          /* If found a match, exit this loop early.  */
@@ -2043,7 +2049,8 @@ redundant_insn (insn, target, delay_list)
            break;
        }
 
-      else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat))
+      else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat)
+              && ! find_reg_note (trial, REG_UNUSED, NULL_RTX))
        break;
     }