diff options
author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-28 12:54:04 +0000 |
---|---|---|
committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-28 12:54:04 +0000 |
commit | 0a20afb57f983cbeb852faf8f7602d8930471387 (patch) | |
tree | 397ded5aa1d2ca77c11ef93e982306030a77bfa7 | |
parent | 2d53096b995f6da7a4157af04a0a961fcee4cf42 (diff) | |
download | gcc-0a20afb57f983cbeb852faf8f7602d8930471387.tar.gz |
�
* cse.c (cse_insn): Enable subsitution inside libcall only for REG,
SUBREG, MEM.
* rtlanal.c (replace_rtx): Prohibit replaces in CONST_DOUBLE.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21435 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cse.c | 10 | ||||
-rw-r--r-- | gcc/rtlanal.c | 8 |
3 files changed, 20 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 425a9406bd7..498879e976e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +1998-07-28 Vladimir N. Makarov <vmakarov@cygnus.com> + + * cse.c (cse_insn): Enable subsitution inside libcall only for REG, + SUBREG, MEM. + * rtlanal.c (replace_rtx): Prohibit replaces in CONST_DOUBLE. + Tue Jul 28 11:33:09 1998 Mark Mitchell <mark@markmitchell.com> * cplus-dem.c (type_kind_t): New type. diff --git a/gcc/cse.c b/gcc/cse.c index 19e809a52dc..5d121870afb 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -6117,8 +6117,9 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality) Then install the new sources and destinations in the table of available values. - If IN_LIBCALL_BLOCK is nonzero, don't record any equivalence made in - the insn. */ + If LIBCALL_INSN is nonzero, don't record any equivalence made in + the insn. It means that INSN is inside libcall block. In this + case LIBCALL_INSN is the corresponding insn with REG_LIBCALL. */ /* Data on one SET contained in the instruction. */ @@ -6948,7 +6949,10 @@ cse_insn (insn, libcall_insn) /* If we just made a substitution inside a libcall, then we need to make the same substitution in any notes attached to the RETVAL insn. */ - if (libcall_insn) + if (libcall_insn + && (GET_CODE (old_src) == REG + || GET_CODE (old_src) == SUBREG + || GET_CODE (old_src) == MEM)) replace_rtx (REG_NOTES (libcall_insn), old_src, canon_reg (SET_SRC (sets[i].rtl), insn)); diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 8f423915b15..221b3fae4c1 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1765,7 +1765,8 @@ inequality_comparisons_p (x) return 0; } -/* Replace any occurrence of FROM in X with TO. +/* Replace any occurrence of FROM in X with TO. The function does + not enter into CONST_DOUBLE for the replace. Note that copying is not done so X must not be shared unless all copies are to be modified. */ @@ -1777,6 +1778,11 @@ replace_rtx (x, from, to) register int i, j; register char *fmt; + /* The following prevents loops occurrence when we change MEM in + CONST_DOUBLE onto the same CONST_DOUBLE. */ + if (x != 0 && GET_CODE (x) == CONST_DOUBLE) + return x; + if (x == from) return to; |