diff options
author | J"orn Rennecke <joern.rennecke@st.com> | 2005-09-27 21:09:28 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2005-09-27 22:09:28 +0100 |
commit | ca7a5aec06cbaa6683aedc8ebb6273e5d0e64fc6 (patch) | |
tree | 0c91c9696e61dce79382b8d1c685a31b922c6dda /gcc/optabs.c | |
parent | dbc6e7b8001e48a3c3f45783244f377ce95d7eb2 (diff) | |
download | gcc-ca7a5aec06cbaa6683aedc8ebb6273e5d0e64fc6.tar.gz |
optabs.c (no_conflict_move_test): Check if a result of a to-be-moved insn would be clobbered by an originally...
* optabs.c (no_conflict_move_test): Check if a result of a
to-be-moved insn would be clobbered by an originally
preceding insn.
From-SVN: r104709
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index 7ca39167390..31212cbc007 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -3026,10 +3026,16 @@ no_conflict_move_test (rtx dest, rtx set, void *p0) || (CALL_P (p->first) && (find_reg_fusage (p->first, USE, dest))) || reg_used_between_p (dest, p->first, p->insn) /* Likewise if this insn depends on a register set by a previous - insn in the list. */ + insn in the list, or if it sets a result (presumably a hard + register) that is set or clobbered by a previous insn. + N.B. the modified_*_p (SET_DEST...) tests applied to a MEM + SET_DEST perform the former check on the address, and the latter + check on the MEM. */ || (GET_CODE (set) == SET && (modified_in_p (SET_SRC (set), p->first) - || modified_between_p (SET_SRC (set), p->first, p->insn)))) + || modified_in_p (SET_DEST (set), p->first) + || modified_between_p (SET_SRC (set), p->first, p->insn) + || modified_between_p (SET_DEST (set), p->first, p->insn)))) p->must_stay = true; } |