OSDN Git Service

* lower-subreg.c (simple_move_operand): Reject CONST.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Feb 2007 17:19:27 +0000 (17:19 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Feb 2007 17:19:27 +0000 (17:19 +0000)
(resolve_clobber): Call validate_change rather than directly
assigning to XEXP (pat, 0).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121652 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lower-subreg.c

index f915a02..52a1592 100644 (file)
@@ -1,3 +1,9 @@
+2007-02-06  Ian Lance Taylor  <iant@google.com>
+
+       * 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  <bonzini@gnu.org>
 
        * Makefile.in (tree-ssa-loop-ivopts.o): Add pointer-set.h dependency.
index 62bfea0..8d04390 100644 (file)
@@ -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;