cse.c (cse_insn): Restoring old behaviour for src_eqv when dest and value in the...
authorKugan Vivekanandarajah <kuganv@linaro.org>
Wed, 5 Aug 2015 01:08:49 +0000 (01:08 +0000)
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>
Wed, 5 Aug 2015 01:08:49 +0000 (01:08 +0000)
gcc/ChangeLog:

2015-08-05  Kugan Vivekanandarajah  <kuganv@linaro.org>

* cse.c (cse_insn): Restoring old behaviour for src_eqv
 when dest and value in the REG_EQUAL are same and dest
 is STRICT_LOW_PART.

From-SVN: r226606

gcc/ChangeLog
gcc/cse.c

index e391b6f58d52e9d6998669d61a6a5e4498ac5df6..9c8e1765d31fb5ff324fade538b7ffbc33aa54e5 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-05  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       * cse.c (cse_insn): Restoring old behaviour for src_eqv
+        when dest and value in the REG_EQUAL are same and dest
+        is STRICT_LOW_PART.
+
 2015-08-04  Anatoly Sokolov  <aesok@post.ru>
 
        * config/moxie/moxie.h (PRINT_OPERAND,
index 88c82fc8d74c1616d372b69b1263c172974b8b18..ef375791d4893602a83358b3e403846ee4cb02e6 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4528,12 +4528,13 @@ cse_insn (rtx_insn *insn)
      this case, and if it isn't set, then there will be no equivalence
      for the destination.  */
   if (n_sets == 1 && REG_NOTES (insn) != 0
-      && (tem = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0
-      && (! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl))))
+      && (tem = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0)
     {
-      if (GET_CODE (SET_DEST (sets[0].rtl)) == STRICT_LOW_PART)
-       src_eqv = copy_rtx (XEXP (tem, 0));
 
+      if (GET_CODE (SET_DEST (sets[0].rtl)) != ZERO_EXTRACT
+         && (! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl))
+             || GET_CODE (SET_DEST (sets[0].rtl)) == STRICT_LOW_PART))
+       src_eqv = copy_rtx (XEXP (tem, 0));
       /* If DEST is of the form ZERO_EXTACT, as in:
         (set (zero_extract:SI (reg:SI 119)
                  (const_int 16 [0x10])