summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-11 18:46:06 +0000
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-11 18:46:06 +0000
commitaf61660e9703bd1618892c9fe9b6f4f2f52a91ee (patch)
tree921912f547c6795e195ee78698f79064d43b0ba6 /gcc/combine.c
parent004f44257fa460df80570719e0ea2afa852ecce8 (diff)
downloadgcc-af61660e9703bd1618892c9fe9b6f4f2f52a91ee.tar.gz
(can_combine_p): Don't move an UNSPEC_VOLATILE.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@4085 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index a33bcc1e293..86f920cf5c5 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -825,10 +825,12 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
If the insns are adjacent, a use can't cross a set even though we
think it might (this can happen for a sequence of insns each setting
the same destination; reg_last_set of that register might point to
- a NOTE). Also, don't move a volatile asm across any other insns. */
+ a NOTE). Also, don't move a volatile asm or UNSPEC_VOLATILE across
+ any other insns. */
|| (! all_adjacent
&& (use_crosses_set_p (src, INSN_CUID (insn))
- || (GET_CODE (src) == ASM_OPERANDS && MEM_VOLATILE_P (src))))
+ || (GET_CODE (src) == ASM_OPERANDS && MEM_VOLATILE_P (src))
+ || GET_CODE (src) == UNSPEC_VOLATILE))
/* If there is a REG_NO_CONFLICT note for DEST in I3 or SUCC, we get
better register allocation by not doing the combine. */
|| find_reg_note (i3, REG_NO_CONFLICT, dest)