cse.c (validate_canon_reg, cse_insn): Don't change insns without calling recog.
2006-05-30 Andreas Krebbel <krebbel1@de.ibm.com> * cse.c (validate_canon_reg, cse_insn): Don't change insns without calling recog. From-SVN: r114241
This commit is contained in:
parent
70233f3788
commit
67e0a632e6
@ -1,3 +1,8 @@
|
||||
2006-05-30 Andreas Krebbel <krebbel1@de.ibm.com>
|
||||
|
||||
* cse.c (validate_canon_reg, cse_insn): Don't change insns without
|
||||
calling recog.
|
||||
|
||||
2006-05-30 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* simplify-rtx.c (simplify_binary_operation): Unfactor the shift
|
||||
|
22
gcc/cse.c
22
gcc/cse.c
@ -2728,17 +2728,10 @@ static void
|
||||
validate_canon_reg (rtx *xloc, rtx insn)
|
||||
{
|
||||
rtx new = canon_reg (*xloc, insn);
|
||||
int insn_code;
|
||||
|
||||
/* If replacing pseudo with hard reg or vice versa, ensure the
|
||||
insn remains valid. Likewise if the insn has MATCH_DUPs. */
|
||||
if (insn != 0 && new != 0
|
||||
&& REG_P (new) && REG_P (*xloc)
|
||||
&& (((REGNO (new) < FIRST_PSEUDO_REGISTER)
|
||||
!= (REGNO (*xloc) < FIRST_PSEUDO_REGISTER))
|
||||
|| GET_MODE (new) != GET_MODE (*xloc)
|
||||
|| (insn_code = recog_memoized (insn)) < 0
|
||||
|| insn_data[insn_code].n_dups > 0))
|
||||
if (insn != 0 && new != 0)
|
||||
validate_change (insn, xloc, new, 1);
|
||||
else
|
||||
*xloc = new;
|
||||
@ -2748,8 +2741,7 @@ validate_canon_reg (rtx *xloc, rtx insn)
|
||||
replace each register reference inside it
|
||||
with the "oldest" equivalent register.
|
||||
|
||||
If INSN is nonzero and we are replacing a pseudo with a hard register
|
||||
or vice versa, validate_change is used to ensure that INSN remains valid
|
||||
If INSN is nonzero validate_change is used to ensure that INSN remains valid
|
||||
after we make our substitution. The calls are made with IN_GROUP nonzero
|
||||
so apply_change_group must be called upon the outermost return from this
|
||||
function (unless INSN is zero). The result of apply_change_group can
|
||||
@ -4943,17 +4935,9 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
rtx dest = SET_DEST (sets[i].rtl);
|
||||
rtx src = SET_SRC (sets[i].rtl);
|
||||
rtx new = canon_reg (src, insn);
|
||||
int insn_code;
|
||||
|
||||
sets[i].orig_src = src;
|
||||
if ((REG_P (new) && REG_P (src)
|
||||
&& ((REGNO (new) < FIRST_PSEUDO_REGISTER)
|
||||
!= (REGNO (src) < FIRST_PSEUDO_REGISTER)))
|
||||
|| (insn_code = recog_memoized (insn)) < 0
|
||||
|| insn_data[insn_code].n_dups > 0)
|
||||
validate_change (insn, &SET_SRC (sets[i].rtl), new, 1);
|
||||
else
|
||||
SET_SRC (sets[i].rtl) = new;
|
||||
validate_change (insn, &SET_SRC (sets[i].rtl), new, 1);
|
||||
|
||||
if (GET_CODE (dest) == ZERO_EXTRACT)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user