stor-layout.c (compute_record_mode): Relax restriction on fields crossing word bounda...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Sun, 4 May 2003 22:04:51 +0000 (22:04 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 4 May 2003 22:04:51 +0000 (18:04 -0400)
* stor-layout.c (compute_record_mode): Relax restriction
on fields crossing word boundaries forcing BLKmode.

From-SVN: r66463

gcc/ChangeLog
gcc/stor-layout.c

index bcd20e3e765d78e136a701d1acde4b76456d3f6b..286b66a34131efb953fa3f69ba4eb02a4360b9dc 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 f275e00d13376ce9a8404f3edb809579df39cd20..14f0f866b7f9a76e9830ad3c2e1afd16b25af508 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