aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2006-05-30 16:54:08 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2006-05-30 16:54:08 +0000
commit67e0a632e6a041394663b2cf6f5dcf642fe662eb (patch)
tree32876cb8b388444f43ea53dad4890c74c0bff90e /gcc/cse.c
parent70233f378882c295d33065075e476487c1bd1729 (diff)
downloadgcc-67e0a632e6a041394663b2cf6f5dcf642fe662eb.zip
gcc-67e0a632e6a041394663b2cf6f5dcf642fe662eb.tar.gz
gcc-67e0a632e6a041394663b2cf6f5dcf642fe662eb.tar.bz2
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
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 3f8dd10..29e20cc 100644
--- a/gcc/cse.c
+++ b/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)
{