diff options
author | Vladimir N. Makarov <vmakarov@cygnus.com> | 1998-07-28 12:54:04 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 1998-07-28 12:54:04 +0000 |
commit | 1ed0205e3520f6f2b1d68ab3266e8afbc61695e6 (patch) | |
tree | 397ded5aa1d2ca77c11ef93e982306030a77bfa7 /gcc | |
parent | 4d17a06f32ff0fad8f8783e39ef34083174ba3e6 (diff) | |
download | gcc-1ed0205e3520f6f2b1d68ab3266e8afbc61695e6.zip gcc-1ed0205e3520f6f2b1d68ab3266e8afbc61695e6.tar.gz gcc-1ed0205e3520f6f2b1d68ab3266e8afbc61695e6.tar.bz2 |
cse.c (cse_insn): Enable subsitution inside libcall only for REG, SUBREG, MEM.
�
* cse.c (cse_insn): Enable subsitution inside libcall only for REG,
SUBREG, MEM.
* rtlanal.c (replace_rtx): Prohibit replaces in CONST_DOUBLE.
From-SVN: r21435
Diffstat (limited to 'gcc')
-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 425a940..498879e 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. @@ -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 8f42391..221b3fa 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; |