trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE masks instead of...
authorRoger Sayle <roger@eyesopen.com>
Sun, 5 Feb 2006 16:59:48 +0000 (16:59 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sun, 5 Feb 2006 16:59:48 +0000 (16:59 +0000)
* trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE
masks instead of LOGICAL*4.

From-SVN: r110617

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

index 971a369..34f1cb2 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-05  Roger Sayle  <roger@eyesopen.com>
+
+       * trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE
+       masks instead of LOGICAL*4.
+
 2006-02-05  Jakub Jelinek  <jakub@redhat.com>
 
        * resolve.c (resolve_symbol): Initialize constructor_expr to NULL.
index 5f43130..eec00e6 100644 (file)
@@ -2639,6 +2639,7 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info,
   tree inner_size, size;
   stmtblock_t body, body1, inner_size_body;
   gfc_se lse, rse;
+  tree mask_type;
   tree count;
   tree tmpexpr;
 
@@ -2652,9 +2653,12 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info,
   size = compute_overall_iter_number (nested_forall_info, inner_size,
                                      &inner_size_body, block);
 
+  /* As the mask array can be very big, prefer compact boolean types.  */
+  mask_type = gfc_get_logical_type (gfc_logical_kinds[0].kind);
+
   /* Allocate temporary for where mask.  */
-  tmp = allocate_temp_for_forall_nest_1 (boolean_type_node, size, block,
-                                        &ptemp1);
+  tmp = allocate_temp_for_forall_nest_1 (mask_type, size, block, &ptemp1);
+
   /* Record the temporary address in order to free it later.  */
   if (ptemp1)
     {
@@ -2666,8 +2670,8 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info,
     }
 
   /* Allocate temporary for !mask.  */
-  ntmp = allocate_temp_for_forall_nest_1 (boolean_type_node, size, block,
-                                         &ptemp2);
+  ntmp = allocate_temp_for_forall_nest_1 (mask_type, size, block, &ptemp2);
+
   /* Record the temporary  in order to free it later.  */
   if (ptemp2)
     {