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
This commit is contained in:
Vladimir N. Makarov 1998-07-28 12:54:04 +00:00 committed by Vladimir Makarov
parent 4d17a06f32
commit 1ed0205e35
3 changed files with 20 additions and 4 deletions

View File

@ -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.

View File

@ -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));

View File

@ -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;