------- Comment #3 from ubizjak at gmail dot com  2010-05-03 16:12 -------
Can you try this patch:

--cut here--
Index: alpha.c
===================================================================
--- alpha.c     (revision 158970)
+++ alpha.c     (working copy)
@@ -842,7 +842,8 @@ alpha_legitimate_address_p (enum machine
 #endif

   /* Register plus a small constant offset is valid.  */
-  if (GET_CODE (x) == PLUS)
+  if (mode == DImode
+      && GET_CODE (x) == PLUS)
     {
       rtx ofs = XEXP (x, 1);
       x = XEXP (x, 0);
--cut here--

The core of the problem is 32bit POINTER_MODE, defined in vms.h and the fact,
that nothing prevents non-DImode address_operands from entering various
expanders. These expanders wrongly assume that decorating match_operand with DI
will magically fix wrong mode.


-- 


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

Reply via email to