revert: re PR middle-end/49721 (convert_memory_address_addr_space may generate invali...
authorAndrew Pinski <apinski@cavium.com>
Wed, 15 Oct 2014 00:38:03 +0000 (00:38 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Wed, 15 Oct 2014 00:38:03 +0000 (17:38 -0700)
2014-10-14  Andrew Pinski  <apinski@cavium.com>

Revert:
2011-08-19  H.J. Lu  <hongjiu.lu@intel.com>

        PR middle-end/49721
        * explow.c (convert_memory_address_addr_space): Also permute the
        conversion and addition of constant for zero-extend.

From-SVN: r216229

gcc/ChangeLog
gcc/explow.c

index 830c12f25c13af22980a958f1a50614cd72215eb..34fbb3558187b7163f65c597c1774cb327b24c54 100644 (file)
@@ -1,3 +1,12 @@
+2014-10-14  Andrew Pinski  <apinski@cavium.com>
+
+       Revert:
+       2011-08-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+        PR middle-end/49721
+        * explow.c (convert_memory_address_addr_space): Also permute the
+        conversion and addition of constant for zero-extend.
+
 2014-10-14  DJ Delorie  <dj@redhat.com>
 
        * config/msp430/msp430-modes.def (PSI): Add.
index 8470691d779604cb8bbb0a056348d4ff9b3287de..3ba766d2f1cd06fb80427877a716b8786e0490f4 100644 (file)
@@ -376,23 +376,18 @@ convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED,
 
     case PLUS:
     case MULT:
-      /* FIXME: For addition, we used to permute the conversion and
-        addition operation only if one operand is a constant and
-        converting the constant does not change it or if one operand
-        is a constant and we are using a ptr_extend instruction
-        (POINTERS_EXTEND_UNSIGNED < 0) even if the resulting address
-        may overflow/underflow.  We relax the condition to include
-        zero-extend (POINTERS_EXTEND_UNSIGNED > 0) since the other
-        parts of the compiler depend on it.  See PR 49721.
-
+      /* For addition we can safely permute the conversion and addition
+        operation if one operand is a constant and converting the constant
+        does not change it or if one operand is a constant and we are
+        using a ptr_extend instruction  (POINTERS_EXTEND_UNSIGNED < 0).
         We can always safely permute them if we are making the address
         narrower.  */
       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
          || (GET_CODE (x) == PLUS
              && CONST_INT_P (XEXP (x, 1))
-             && (POINTERS_EXTEND_UNSIGNED != 0
-                 || XEXP (x, 1) == convert_memory_address_addr_space
-                                       (to_mode, XEXP (x, 1), as))))
+             && (XEXP (x, 1) == convert_memory_address_addr_space
+                                  (to_mode, XEXP (x, 1), as)
+                 || POINTERS_EXTEND_UNSIGNED < 0)))
        return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
                               convert_memory_address_addr_space
                                 (to_mode, XEXP (x, 0), as),