summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorCatherine Moore <clm@cygnus.com>1998-04-06 10:49:13 +0000
committerRichard Henderson <rth@gcc.gnu.org>1998-04-06 03:49:13 -0700
commitd276f2bb0c9b6e5d73ff879433f8a3616ff08373 (patch)
tree18eca73ba61813c4a0c66ba3359383e5a9687123 /gcc/combine.c
parent64ad9df2cee59d28fe1c49abdf0a5b1254fa7b30 (diff)
downloadgcc-d276f2bb0c9b6e5d73ff879433f8a3616ff08373.tar.gz
combine.c (can_combine_p): Include successor in volatile test.
Mon Apr 6 07:17:52 1998 Catherine Moore <clm@cygnus.com> * combine.c (can_combine_p): Include successor in volatile test. From-SVN: r19018
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 8a03a3ded67..c831be1052a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1037,14 +1037,19 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
return 0;
/* If INSN contains anything volatile, or is an `asm' (whether volatile
- or not), reject, unless nothing volatile comes between it and I3,
- with the exception of SUCC. */
+ or not), reject, unless nothing volatile comes between it and I3 */
if (GET_CODE (src) == ASM_OPERANDS || volatile_refs_p (src))
- for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p))
- if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
- && p != succ && volatile_refs_p (PATTERN (p)))
- return 0;
+ {
+ /* Make sure succ doesn't contain a volatile reference. */
+ if (succ != 0 && volatile_refs_p (PATTERN (succ)))
+ return 0;
+
+ for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p))
+ if (GET_RTX_CLASS (GET_CODE (p)) == 'i'
+ && p != succ && volatile_refs_p (PATTERN (p)))
+ return 0;
+ }
/* If INSN is an asm, and DEST is a hard register, reject, since it has
to be an explicit register variable, and was chosen for a reason. */