]> gcc.gnu.org Git - gcc.git/commitdiff
(can_combine_p): Don't don't substitute an expression
authorRichard Stallman <rms@gnu.org>
Wed, 28 Oct 1992 20:15:51 +0000 (20:15 +0000)
committerRichard Stallman <rms@gnu.org>
Wed, 28 Oct 1992 20:15:51 +0000 (20:15 +0000)
containing a register that will be clobbered in I3.

From-SVN: r2631

gcc/combine.c

index de46091a89def77a42c9c0ec7cb8df520b7a4301..89383a46ce671a76dcee38bd048366c1d60bee06 100644 (file)
@@ -776,11 +776,15 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
   else if (GET_CODE (dest) != CC0)
     return 0;
 
-  /* Don't substitute for a register intended as a clobberable operand.  */
+  /* Don't substitute for a register intended as a clobberable operand.
+     Similarly, don't substitute an expression containing a register that
+     will be clobbered in I3.  */
   if (GET_CODE (PATTERN (i3)) == PARALLEL)
     for (i = XVECLEN (PATTERN (i3), 0) - 1; i >= 0; i--)
       if (GET_CODE (XVECEXP (PATTERN (i3), 0, i)) == CLOBBER
-         && rtx_equal_p (XEXP (XVECEXP (PATTERN (i3), 0, i), 0), dest))
+         && (reg_overlap_mentioned_p (XEXP (XVECEXP (PATTERN (i3), 0, i), 0),
+                                      src)
+             || rtx_equal_p (XEXP (XVECEXP (PATTERN (i3), 0, i), 0), dest)))
        return 0;
 
   /* If INSN contains anything volatile, or is an `asm' (whether volatile
This page took 0.134518 seconds and 5 git commands to generate.