picochip.c (GO_IF_LEGITIMATE_ADDRESS): Disallow non-indexable addresses even before...
authorHariharan Sandanagobalane <hariharan@picochip.com>
Wed, 4 Feb 2009 16:17:47 +0000 (16:17 +0000)
committerHariharan Sandanagobalane <hariharans@gcc.gnu.org>
Wed, 4 Feb 2009 16:17:47 +0000 (16:17 +0000)
        * config/picochip/picochip.c (GO_IF_LEGITIMATE_ADDRESS): Disallow
          non-indexable addresses even before reload.

From-SVN: r143929

gcc/ChangeLog
gcc/config/picochip/picochip.c

index fb586ed..a13903c 100644 (file)
@@ -1,3 +1,8 @@
+2009-02-04  Hariharan Sandanagobalane  <hariharan@picochip.com>
+
+       * config/picochip/picochip.c (GO_IF_LEGITIMATE_ADDRESS): Disallow
+       non-indexable addresses even before reload.
+
 2009-02-03  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/29129
index a0686bd..0667656 100644 (file)
@@ -1200,8 +1200,7 @@ picochip_legitimate_address_register (rtx x, unsigned strict)
 /* Determine whether the given constant is in the range required for
    the given base register. */
 static int
-picochip_const_ok_for_base (enum machine_mode mode, int regno, int offset,
-                            int strict)
+picochip_const_ok_for_base (enum machine_mode mode, int regno, int offset)
 {
   HOST_WIDE_INT corrected_offset;
 
@@ -1209,17 +1208,16 @@ picochip_const_ok_for_base (enum machine_mode mode, int regno, int offset,
     {
       if (GET_MODE_SIZE(mode) <= 4)
       {
-         /* We can allow incorrect offsets if strict is 0. If strict is 1,
-            we are in reload and these memory accesses need to be changed. */
-         if (offset % GET_MODE_SIZE (mode) != 0 && strict == 1)
+         /* We used to allow incorrect offsets if strict is 0. But, this would
+            then rely on reload doing the right thing. We have had problems
+            there before, and on > 4.3 compiler, there are no benefits. */
+         if (offset % GET_MODE_SIZE (mode) != 0)
            return 0;
          corrected_offset = offset / GET_MODE_SIZE (mode);
       }
       else
       {
-         /* We can allow incorrect offsets if strict is 0. If strict is 1,
-            we are in reload and these memory accesses need to be changed. */
-         if (offset % 4 != 0 && strict == 1)
+         if (offset % 4 != 0)
            return 0;
          corrected_offset = offset / 4;
       }
@@ -1272,7 +1270,7 @@ picochip_legitimate_address_p (int mode, rtx x, unsigned strict)
                 picochip_legitimate_address_register (base, strict) &&
                 CONST_INT == GET_CODE (offset) &&
                 picochip_const_ok_for_base (mode, REGNO (base),
-                                            INTVAL (offset),strict));
+                                            INTVAL (offset)));
        break;
       }