diff options
author | Richard Stallman <rms@gnu.org> | 1992-10-28 20:15:51 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-10-28 20:15:51 +0000 |
commit | 5f96750d14e28200c13fb15d88edc77ecc8cbafc (patch) | |
tree | 73c88455d61388bd6fb9a840e9bc39fbdaafcccf /gcc/combine.c | |
parent | dc4e989cc8d778764e96577061efc48770bc17fd (diff) | |
download | gcc-5f96750d14e28200c13fb15d88edc77ecc8cbafc.zip gcc-5f96750d14e28200c13fb15d88edc77ecc8cbafc.tar.gz gcc-5f96750d14e28200c13fb15d88edc77ecc8cbafc.tar.bz2 |
(can_combine_p): Don't don't substitute an expression
containing a register that will be clobbered in I3.
From-SVN: r2631
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index de46091..89383a4 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -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 |