http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50696

--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> 2011-10-11 20:11:59 
UTC ---
Does this patch

diff --git a/gcc/combine.c b/gcc/combine.c
index 6c3b17c..52259b6 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -5078,6 +5078,22 @@ subst (rtx x, rtx from, rtx to, int in_dest, int
in_cond, int unique_copy)
         }
     }
     }
+#ifdef POINTERS_EXTEND_UNSIGNED
+  else if (POINTERS_EXTEND_UNSIGNED > 0
+       && code == MEM
+       && GET_MODE (XEXP (x, 0)) == Pmode
+       && GET_MODE (from) == ptr_mode
+       && GET_CODE (XEXP (x, 0)) == ZERO_EXTEND
+       && COMBINE_RTX_EQUAL_P (XEXP (XEXP (x, 0), 0), from))
+    {
+      /* If an address is zero-extended from ptr_mode to
+     Pmode, replace FROM with TO.  */
+      SUBST (XEXP (XEXP (x, 0), 0),
+         (unique_copy && n_occurrences
+          ? copy_rtx (to) : to));
+      n_occurrences++;
+    }
+#endif
   else
     {
       len = GET_RTX_LENGTH (code);

make any senses?

Reply via email to