OSDN Git Service

* combine.c (combine_instructions): Don't use reg_equal/equiv
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Aug 2005 04:32:00 +0000 (04:32 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Aug 2005 04:32:00 +0000 (04:32 +0000)
        results if the mode doesn't match.

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

gcc/ChangeLog
gcc/combine.c

index 97a4598..f15d09e 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-02  Richard Henderson  <rth@redhat.com>
+
+       * combine.c (combine_instructions): Don't use reg_equal/equiv
+       results if the mode doesn't match.
+
 2005-08-02  Mark Mitchell  <mark@codesourcery.com>
 
        * config/i386/t-mingw32 (NATIVE_SYSTEM_HEADER_DIR): Set it.
index d8d3baf..bbd6c09 100644 (file)
@@ -860,16 +860,19 @@ combine_instructions (rtx f, unsigned int nregs)
                  rtx temp = XEXP (links, 0);
                  if ((set = single_set (temp)) != 0
                      && (note = find_reg_equal_equiv_note (temp)) != 0
-                     && GET_CODE (XEXP (note, 0)) != EXPR_LIST
+                     && (note = XEXP (note, 0), GET_CODE (note)) != EXPR_LIST
                      /* Avoid using a register that may already been marked
                         dead by an earlier instruction.  */
-                     && ! unmentioned_reg_p (XEXP (note, 0), SET_SRC (set)))
+                     && ! unmentioned_reg_p (note, SET_SRC (set))
+                     && (GET_MODE (note) == VOIDmode
+                         ? SCALAR_INT_MODE_P (GET_MODE (SET_DEST (set)))
+                         : GET_MODE (SET_DEST (set)) == GET_MODE (note)))
                    {
                      /* Temporarily replace the set's source with the
                         contents of the REG_EQUAL note.  The insn will
                         be deleted or recognized by try_combine.  */
                      rtx orig = SET_SRC (set);
-                     SET_SRC (set) = XEXP (note, 0);
+                     SET_SRC (set) = note;
                      next = try_combine (insn, temp, NULL_RTX,
                                          &new_direct_jump_p);
                      if (next)