re PR rtl-optimization/47866 (gcc.dg/torture/vector-2.c fails on IA64)
authorJakub Jelinek <jakub@redhat.com>
Wed, 9 Mar 2011 20:49:00 +0000 (21:49 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 9 Mar 2011 20:49:00 +0000 (21:49 +0100)
PR rtl-optimization/47866
* expr.c (store_field): If MEM_SCALAR_P (target), don't use
MEM_SET_IN_STRUCT_P (to_rtx, 1), just set MEM_IN_STRUCT_P (to_rtx)
if target wasn't scalar.
* function.c (assign_stack_temp_for_type): Assert that neither
MEM_SCALAR_P nor MEM_IN_STRUCT_P is set previously, set either
MEM_IN_STRUCT_P or MEM_SCALAR_P instead of using MEM_SET_IN_STRUCT_P
macro.
* rtl.h (MEM_SET_IN_STRUCT_P): Removed.

From-SVN: r170834

gcc/ChangeLog
gcc/expr.c
gcc/function.c
gcc/rtl.h

index 147e7ef856cf5efe3669b0c62d13dfeb28b03870..ca24623dfd596be1bce4d70d6305b91ed0ce5dbe 100644 (file)
@@ -1,3 +1,15 @@
+2011-03-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/47866
+       * expr.c (store_field): If MEM_SCALAR_P (target), don't use
+       MEM_SET_IN_STRUCT_P (to_rtx, 1), just set MEM_IN_STRUCT_P (to_rtx)
+       if target wasn't scalar.
+       * function.c (assign_stack_temp_for_type): Assert that neither
+       MEM_SCALAR_P nor MEM_IN_STRUCT_P is set previously, set either
+       MEM_IN_STRUCT_P or MEM_SCALAR_P instead of using MEM_SET_IN_STRUCT_P
+       macro.
+       * rtl.h (MEM_SET_IN_STRUCT_P): Removed.
+
 2011-03-09  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
        * config/s390/s390-protos.h (s390_label_align): New prototype.
index b09b1ac07c227f9f42f635fd26e2993824fc0d46..6a5f74b42105a77ef61553da64c7b23178c008e2 100644 (file)
@@ -5924,7 +5924,8 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
       if (to_rtx == target)
        to_rtx = copy_rtx (to_rtx);
 
-      MEM_SET_IN_STRUCT_P (to_rtx, 1);
+      if (!MEM_SCALAR_P (to_rtx))
+       MEM_IN_STRUCT_P (to_rtx) = 1;
       if (!MEM_KEEP_ALIAS_SET_P (to_rtx) && MEM_ALIAS_SET (to_rtx) != 0)
        set_mem_alias_set (to_rtx, alias_set);
 
index 19b480d20ba6d1adce36433509908d1718a74363..1f7722c62a22a04b17d3b72a976117d3be68b95a 100644 (file)
@@ -942,8 +942,11 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size,
   if (type != 0)
     {
       MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
-      MEM_SET_IN_STRUCT_P (slot, (AGGREGATE_TYPE_P (type)
-                                 || TREE_CODE (type) == COMPLEX_TYPE));
+      gcc_checking_assert (!MEM_SCALAR_P (slot) && !MEM_IN_STRUCT_P (slot));
+      if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
+       MEM_IN_STRUCT_P (slot) = 1;
+      else
+       MEM_SCALAR_P (slot) = 1;
     }
   MEM_NOTRAP_P (slot) = 1;
 
index 0552156d64808a830a22dce932cd230b7d9c0dfa..66f275570fabcf67d80e36b4b90f013e71b7726f 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1279,24 +1279,6 @@ do {                                                                     \
 #define MEM_NOTRAP_P(RTX) \
   (RTL_FLAG_CHECK1("MEM_NOTRAP_P", (RTX), MEM)->call)
 
-/* If VAL is nonzero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in
-   RTX.  Otherwise, vice versa.  Use this macro only when you are
-   *sure* that you know that the MEM is in a structure, or is a
-   scalar.  VAL is evaluated only once.  */
-#define MEM_SET_IN_STRUCT_P(RTX, VAL)          \
-do {                                           \
-  if (VAL)                                     \
-    {                                          \
-      MEM_IN_STRUCT_P (RTX) = 1;               \
-      MEM_SCALAR_P (RTX) = 0;                  \
-    }                                          \
-  else                                         \
-    {                                          \
-      MEM_IN_STRUCT_P (RTX) = 0;               \
-      MEM_SCALAR_P (RTX) = 1;                  \
-    }                                          \
-} while (0)
-
 /* The memory attribute block.  We provide access macros for each value
    in the block and provide defaults if none specified.  */
 #define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1)