aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-02-05 16:59:48 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-02-05 16:59:48 +0000
commitc2a11bfcc0ddc8c7faa7a823e0fb1e139771b027 (patch)
tree4d7681b4fef9f6aba6de19a89d61d4016e5ae202
parent5a1a44503eb33a30057d524772cd1f7160d13c5f (diff)
downloadgcc-c2a11bfcc0ddc8c7faa7a823e0fb1e139771b027.zip
gcc-c2a11bfcc0ddc8c7faa7a823e0fb1e139771b027.tar.gz
gcc-c2a11bfcc0ddc8c7faa7a823e0fb1e139771b027.tar.bz2
trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE masks instead of LOGICAL*4.
* trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE masks instead of LOGICAL*4. From-SVN: r110617
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-stmt.c12
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 971a369..34f1cb2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c
index 5f43130..eec00e6 100644
--- a/gcc/fortran/trans-stmt.c
+++ b/gcc/fortran/trans-stmt.c
@@ -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)
{