PR target/25299
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Dec 2005 01:28:50 +0000 (01:28 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Dec 2005 01:28:50 +0000 (01:28 +0000)
* config/rs6000/rs6000.c (rs6000_special_round_type_align): Increase
alignment to doubleword if the first field is a double array.
* config/rs6000/linux64.h (TARGET_ALIGN_NATURAL): Define.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108393 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/linux64.h
gcc/config/rs6000/rs6000.c

index 47d19ac..1e602a2 100644 (file)
@@ -1,3 +1,10 @@
+2005-12-12  Alan Modra  <amodra@bigpond.net.au>
+
+       PR target/25299
+       * config/rs6000/rs6000.c (rs6000_special_round_type_align): Increase
+       alignment to doubleword if the first field is a double array.
+       * config/rs6000/linux64.h (TARGET_ALIGN_NATURAL): Define.
+
 2005-12-11  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-structalias.c (process_constraint): Remove code to
index 1555d29..bc615e8 100644 (file)
@@ -236,6 +236,12 @@ extern int dot_symbols;
    ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED)     \
    : MAX ((COMPUTED), (SPECIFIED)))
 
+/* Use the default for compiling target libs.  */
+#ifdef IN_TARGET_LIBS
+#undef TARGET_ALIGN_NATURAL
+#define TARGET_ALIGN_NATURAL 1
+#endif
+
 /* Indicate that jump tables go in the text section.  */
 #undef  JUMP_TABLES_IN_TEXT_SECTION
 #define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT
index 609de94..9f547da 100644 (file)
@@ -2513,7 +2513,10 @@ rs6000_special_round_type_align (tree type, int computed, int specified)
   while (field != NULL && TREE_CODE (field) != FIELD_DECL)
     field = TREE_CHAIN (field);
 
-  if (field == NULL || field == type || DECL_MODE (field) != DFmode)
+  if (field == NULL || field == type
+      || TYPE_MODE (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
+                   ? get_inner_array_type (field)
+                   : TREE_TYPE (field)) != DFmode)
     return MAX (computed, specified);
 
   return MAX (MAX (computed, specified), 64);