diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f915a021713..52a15923fed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-02-06 Ian Lance Taylor + + * lower-subreg.c (simple_move_operand): Reject CONST. + (resolve_clobber): Call validate_change rather than directly + assigning to XEXP (pat, 0). + 2006-02-06 Paolo Bonzini * Makefile.in (tree-ssa-loop-ivopts.o): Add pointer-set.h dependency. diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c index 62bfea0a100..8d04390da93 100644 --- a/gcc/lower-subreg.c +++ b/gcc/lower-subreg.c @@ -80,7 +80,8 @@ simple_move_operand (rtx x) if (GET_CODE (x) == LABEL_REF || GET_CODE (x) == SYMBOL_REF - || GET_CODE (x) == HIGH) + || GET_CODE (x) == HIGH + || GET_CODE (x) == CONST) return false; if (MEM_P (x) @@ -832,6 +833,7 @@ resolve_clobber (rtx pat, rtx insn) rtx reg; enum machine_mode orig_mode; unsigned int words, i; + int ret; reg = XEXP (pat, 0); if (!resolve_reg_p (reg) && !resolve_subreg_p (reg)) @@ -841,7 +843,12 @@ resolve_clobber (rtx pat, rtx insn) words = GET_MODE_SIZE (orig_mode); words = (words + UNITS_PER_WORD - 1) / UNITS_PER_WORD; - XEXP (pat, 0) = simplify_gen_subreg_concatn (word_mode, reg, orig_mode, 0); + ret = validate_change (NULL_RTX, &XEXP (pat, 0), + simplify_gen_subreg_concatn (word_mode, reg, + orig_mode, 0), + 0); + gcc_assert (ret != 0); + for (i = words - 1; i > 0; --i) { rtx x;