aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1998-08-15 18:55:58 -0600
committerJeff Law <law@gcc.gnu.org>1998-08-15 18:55:58 -0600
commit8ec82f87f37e49d9b5c95f680428613d3a709b39 (patch)
tree008d2e6d0e639a57c9ead6955d7169479dc5945c /gcc
parent2753f812d469da384868027ea56249a8d998192e (diff)
downloadgcc-8ec82f87f37e49d9b5c95f680428613d3a709b39.zip
gcc-8ec82f87f37e49d9b5c95f680428613d3a709b39.tar.gz
gcc-8ec82f87f37e49d9b5c95f680428613d3a709b39.tar.bz2
reload.c (find_equiv_reg): Reject equivalences separated by a volatile instruction.
8 * reload.c (find_equiv_reg): Reject equivalences separated by a volatile instruction. From-SVN: r21763
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 1461cad..b1483d1 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -6198,12 +6198,17 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
{
+ pat = PATTERN (p);
+
+ /* Watch out for unspec_volatile, and volatile asms. */
+ if (volatile_insn_p (pat))
+ return 0;
+
/* If this insn P stores in either GOAL or VALUE, return 0.
If GOAL is a memory ref and this insn writes memory, return 0.
If GOAL is a memory ref and its address is not constant,
and this insn P changes a register used in GOAL, return 0. */
- pat = PATTERN (p);
if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER)
{
register rtx dest = SET_DEST (pat);