OSDN Git Service

* stor-layout.c (compute_record_mode): Relax restriction
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 May 2003 22:04:51 +0000 (22:04 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 May 2003 22:04:51 +0000 (22:04 +0000)
on fields crossing word boundaries forcing BLKmode.

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

gcc/ChangeLog
gcc/stor-layout.c

index bcd20e3..286b66a 100644 (file)
@@ -1,3 +1,8 @@
+2003-05-04  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * stor-layout.c (compute_record_mode): Relax restriction
+       on fields crossing word boundaries forcing BLKmode.
+
 2003-05-04  Neil Booth  <neil@daikokuya.co.uk>
 
        * cppinit.c (cpp_create_reader, post_options): Warn about
index f275e00..14f0f86 100644 (file)
@@ -1387,8 +1387,10 @@ compute_record_mode (type)
       if (bitpos / BITS_PER_WORD
          != ((tree_low_cst (DECL_SIZE (field), 1) + bitpos - 1)
              / BITS_PER_WORD)
-         /* But there is no problem if the field is entire words.  */
-         && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0)
+         /* But there is no problem if the field is entire words
+            or bigger than a word.  */
+         && ! (tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD == 0
+               || compare_tree_int (DECL_SIZE (field), BITS_PER_WORD) > 0))
        return;
 
       /* If this field is the whole struct, remember its mode so