OSDN Git Service

* explow.c (convert_memory_address): Fold memory reference when
authorsje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Mar 2007 16:02:32 +0000 (16:02 +0000)
committersje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Mar 2007 16:02:32 +0000 (16:02 +0000)
POINTERS_EXTEND_UNSIGNED < 0

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

gcc/ChangeLog
gcc/explow.c

index a53840e..c6f76cc 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-21  Steve Ellcey  <sje@cup.hp.com>
+
+       * explow.c (convert_memory_address): Fold memory reference when
+       POINTERS_EXTEND_UNSIGNED < 0
+
 2007-03-21  Richard Henderson  <rth@redhat.com>
 
        PR target/31245
index a710274..b2d4f52 100644 (file)
@@ -382,12 +382,15 @@ convert_memory_address (enum machine_mode to_mode ATTRIBUTE_UNUSED,
     case MULT:
       /* 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.  We can always safely permute them if we are
-        making the address narrower.  */
+        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
              && GET_CODE (XEXP (x, 1)) == CONST_INT
-             && XEXP (x, 1) == convert_memory_address (to_mode, XEXP (x, 1))))
+             && (XEXP (x, 1) == convert_memory_address (to_mode, XEXP (x, 1))
+                 || POINTERS_EXTEND_UNSIGNED < 0)))
        return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
                               convert_memory_address (to_mode, XEXP (x, 0)),
                               XEXP (x, 1));