Use the middle-end boolean_type_node
authorJanne Blomqvist <jb@gcc.gnu.org>
Tue, 20 Dec 2016 20:46:13 +0000 (22:46 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Tue, 20 Dec 2016 20:46:13 +0000 (22:46 +0200)
Use the boolean_type_node setup by the middle-end instead of
redefining it. boolean_type_node is not used in GFortran for any
ABI-visible stuff, only internally as the type of boolean
expressions. There appears to be one exception to this, namely the
caf_get* and caf_send* calls which have boolean_type_node
arguments. However, on the library side they seem to use C _Bool, so I
suspect this might be a case of a argument mismatch that hasn't
affected anything so far.

The practical effect of this is that the size of such variables will
be the same as a C _Bool or C++ bool, that is, on most targets a
single byte. Previously we redefined boolean_type_node to be a Fortran
default logical kind sized variable, that is 4 or 8 bytes depending on
compile options. This might enable slightly more compact code, in case
the optimizer determines that the result of such a generated
comparison expression needs to be stored in some temporary location
rather than being used immediately.

Regression tested on x86_64-pc-linux-gnu.

2016-12-20  Janne Blomqvist  <jb@gcc.gnu.org>

* trans-types.c (gfc_init_types): Don't redefine boolean type node.

From-SVN: r243830

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

index 06c2f52ed4243bf51babe4e6a77b77e37045a27d..5154b1981eb5f9745d301567563f15437b03773a 100644 (file)
@@ -1,3 +1,7 @@
+2016-12-20  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       * trans-types.c (gfc_init_types): Don't redefine boolean type node.
+
 2016-12-19  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * trans-decl.c (create_main_function): Remove unused elements to
index 354308f8d9d658fc19aff3c295ac58a339b4405d..e8dafa0d0af46ef559a53848d157a943be097675 100644 (file)
@@ -961,10 +961,6 @@ gfc_init_types (void)
                        wi::mask (n, UNSIGNED,
                                  TYPE_PRECISION (size_type_node)));
 
-  boolean_type_node = gfc_get_logical_type (gfc_default_logical_kind);
-  boolean_true_node = build_int_cst (boolean_type_node, 1);
-  boolean_false_node = build_int_cst (boolean_type_node, 0);
-
   /* ??? Shouldn't this be based on gfc_index_integer_kind or so?  */
   gfc_charlen_int_kind = 4;
   gfc_charlen_type_node = gfc_get_int_type (gfc_charlen_int_kind);