i386.c (constant_address_p): Use legitimate_constant_p.
authorJan Hubicka <jh@suse.cz>
Thu, 3 Apr 2003 07:54:27 +0000 (09:54 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 3 Apr 2003 07:54:27 +0000 (07:54 +0000)
* i386.c (constant_address_p): Use legitimate_constant_p.
(legitimate_address_p): Do not use CONSTANT_ADDRESS_P.

From-SVN: r65196

gcc/ChangeLog
gcc/config/i386/i386.c

index 7d50188..ac2b403 100644 (file)
@@ -1,3 +1,8 @@
+Thu Apr  3 09:53:40 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * i386.c (constant_address_p): Use legitimate_constant_p.
+       (legitimate_address_p): Do not use CONSTANT_ADDRESS_P.
+
 2003-04-02  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/h8300/h8300-protos.h: Add a prototype for
@@ -26,7 +31,7 @@ Thu Apr  3 00:31:21 CEST 2003  Jan Hubicka  <jh@suse.cz>
 
        * doc/install.texi (Specific): Update pointers to apple.com.
 
-Thu Apr  3 00:18:49 CEST 2003  Jan HUbicka  <jh@suse.cz>
+Thu Apr  3 00:18:49 CEST 2003  Jan Hubicka  <jh@suse.cz>
 
        * i386.c (override_options):  Disable red zone by default on i386.
        (compute_frame_layout, ix86_force_to_memory, ix86_free_from_memory):  
index a96c6ec..1637616 100644 (file)
@@ -5710,26 +5710,7 @@ bool
 constant_address_p (x)
      rtx x;
 {
-  switch (GET_CODE (x))
-    {
-    case LABEL_REF:
-    case CONST_INT:
-      return true;
-
-    case CONST_DOUBLE:
-      return TARGET_64BIT;
-
-    case CONST:
-      /* For Mach-O, really believe the CONST.  */
-      if (TARGET_MACHO)
-       return true;
-      /* Otherwise fall through.  */
-    case SYMBOL_REF:
-      return !flag_pic && legitimate_constant_p (x);
-
-    default:
-      return false;
-    }
+  return CONSTANT_P (x) && legitimate_address_p (Pmode, x, 1);
 }
 
 /* Nonzero if the constant value X is a legitimate general operand
@@ -6080,7 +6061,12 @@ legitimate_address_p (mode, addr, strict)
             that never results in lea, this seems to be easier and
             correct fix for crash to disable this test.  */
        }
-      else if (!CONSTANT_ADDRESS_P (disp))
+      else if (GET_CODE (disp) != LABEL_REF
+              && GET_CODE (disp) != CONST_INT
+              && (GET_CODE (disp) != CONST
+                  || !legitimate_constant_p (disp))
+              && (GET_CODE (disp) != SYMBOL_REF
+                  || !legitimate_constant_p (disp)))
        {
          reason = "displacement is not constant";
          goto report_error;
@@ -6090,11 +6076,6 @@ legitimate_address_p (mode, addr, strict)
          reason = "displacement is out of range";
          goto report_error;
        }
-      else if (!TARGET_64BIT && GET_CODE (disp) == CONST_DOUBLE)
-       {
-         reason = "displacement is a const_double";
-         goto report_error;
-       }
     }
 
   /* Everything looks valid.  */