OSDN Git Service

* trans-stmt.c (gfc_trans_forall_1): Prefer to use smaller logical
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 26 Jun 2005 05:21:25 +0000 (05:21 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 26 Jun 2005 05:21:25 +0000 (05:21 +0000)
type than boolean_type_node.

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

gcc/fortran/ChangeLog
gcc/fortran/trans-stmt.c

index 71a4c8b..e18ab3f 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * trans-stmt.c (gfc_trans_forall_1): Prefer to use smaller logical
+       type than boolean_type_node.
+
 2005-06-25  Kelley Cook  <kcook@gcc.gnu.org>
 
        * all files: Update FSF address in copyright headers.
index ed451ee..8fda557 100644 (file)
@@ -2411,11 +2411,17 @@ gfc_trans_forall_1 (gfc_code * code, forall_info * nested_forall_info)
      For now we assume a mask temporary is needed.  */
   if (code->expr)
     {
+      /* As the mask array can be very big, prefer compact
+        boolean types.  */
+      tree smallest_boolean_type_node
+       = gfc_get_logical_type (gfc_logical_kinds[0].kind);
+
       /* Allocate the mask temporary.  */
       bytesize = fold_build2 (MULT_EXPR, gfc_array_index_type, size,
-                             TYPE_SIZE_UNIT (boolean_type_node));
+                             TYPE_SIZE_UNIT (smallest_boolean_type_node));
 
-      mask = gfc_do_allocate (bytesize, size, &pmask, &block, boolean_type_node);
+      mask = gfc_do_allocate (bytesize, size, &pmask, &block,
+                             smallest_boolean_type_node);
 
       maskindex = gfc_create_var_np (gfc_array_index_type, "mi");
       /* Record them in the info structure.  */
@@ -2434,7 +2440,7 @@ gfc_trans_forall_1 (gfc_code * code, forall_info * nested_forall_info)
       gfc_add_block_to_block (&body, &se.pre);
 
       /* Store the mask.  */
-      se.expr = convert (boolean_type_node, se.expr);
+      se.expr = convert (smallest_boolean_type_node, se.expr);
 
       if (pmask)
        tmp = gfc_build_indirect_ref (mask);