[9/77] Add SCALAR_FLOAT_TYPE_MODE
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 30 Aug 2017 11:09:27 +0000 (11:09 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 30 Aug 2017 11:09:27 +0000 (11:09 +0000)
This patch adds a macro that extracts the TYPE_MODE and forcibly
converts it to a scalar_float_mode.  The forcible conversion
includes a gcc_checking_assert that the mode is a SCALAR_FLOAT_MODE_P.

This becomes important as more static type checking is added by
later patches.  It has the additional benefit of bypassing the
VECTOR_TYPE_P (...) ? vector_type_mode (...) : ... condition
in TYPE_MODE; in release builds the new macro is a simple
field access.

2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* tree.h (SCALAR_FLOAT_TYPE_MODE): New macro.
* builtins.c (expand_builtin_signbit): Use it instead of TYPE_MODE.
* fold-const.c (fold_convert_const_real_from_fixed): Likewise.
(native_encode_real): Likewise.
(native_interpret_real): Likewise.
* hsa-brig.c (emit_immediate_scalar_to_buffer): Likewise.
* tree-vrp.c (simplify_float_conversion_using_ranges): Likewise.

gcc/cp/
* mangle.c (write_real_cst): Use SCALAR_FLOAT_TYPE_MODE
instead of TYPE_MODE.

gcc/fortran/
* target-memory.c (size_float): Use SCALAR_FLOAT_TYPE_MODE
instead of TYPE_MODE.

gcc/objc/
* objc-encoding.c (encode_type): Use SCALAR_FLOAT_TYPE_MODE
instead of TYPE_MODE.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251460

12 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/cp/ChangeLog
gcc/cp/mangle.c
gcc/fold-const.c
gcc/fortran/ChangeLog
gcc/fortran/target-memory.c
gcc/hsa-brig.c
gcc/objc/ChangeLog
gcc/objc/objc-encoding.c
gcc/tree-vrp.c
gcc/tree.h

index 736902bd82a89590c1ed26c19179f392229d3705..5ca560ee2b1804a3c353ca68aefaaed6dc44a081 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * tree.h (SCALAR_FLOAT_TYPE_MODE): New macro.
+       * builtins.c (expand_builtin_signbit): Use it instead of TYPE_MODE.
+       * fold-const.c (fold_convert_const_real_from_fixed): Likewise.
+       (native_encode_real): Likewise.
+       (native_interpret_real): Likewise.
+       * hsa-brig.c (emit_immediate_scalar_to_buffer): Likewise.
+       * tree-vrp.c (simplify_float_conversion_using_ranges): Likewise.
+
 2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 2f361bfde4b4b25e6ff755ae2638fc02f8290ec0..4cb1d37ddfd9485344e836cdf68320b4ea4ae84d 100644 (file)
@@ -5301,7 +5301,8 @@ static rtx
 expand_builtin_signbit (tree exp, rtx target)
 {
   const struct real_format *fmt;
-  machine_mode fmode, imode, rmode;
+  scalar_float_mode fmode;
+  machine_mode imode, rmode;
   tree arg;
   int word, bitpos;
   enum insn_code icode;
@@ -5312,7 +5313,7 @@ expand_builtin_signbit (tree exp, rtx target)
     return NULL_RTX;
 
   arg = CALL_EXPR_ARG (exp, 0);
-  fmode = TYPE_MODE (TREE_TYPE (arg));
+  fmode = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (arg));
   rmode = TYPE_MODE (TREE_TYPE (exp));
   fmt = REAL_MODE_FORMAT (fmode);
 
index 8532f57e91a3030a29488dfd8d9056d5c09fedc1..fc6231c66595a3ef2bad285b643a05aa40c4bbba 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * mangle.c (write_real_cst): Use SCALAR_FLOAT_TYPE_MODE
+       instead of TYPE_MODE.
+
 2017-08-29  Jason Merrill  <jason@redhat.com>
 
        PR c++/81236 - ICE with template-id in generic lambda
index ce7c0c51f0ae931988db8d93d6e709a868f0b091..15f442133e6711ff6f6bb7efa0f03279a82d1752 100644 (file)
@@ -1788,7 +1788,7 @@ write_real_cst (const tree value)
   int i, limit, dir;
 
   tree type = TREE_TYPE (value);
-  int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
+  int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32;
 
   real_to_target (target_real, &TREE_REAL_CST (value),
                  TYPE_MODE (type));
index de60f681514aacedb993d5c83c081354fa3b342b..27f4f4eb59f7aa1b3a1a3d2bf91b1272e36e3e7d 100644 (file)
@@ -2032,7 +2032,8 @@ fold_convert_const_real_from_fixed (tree type, const_tree arg1)
   REAL_VALUE_TYPE value;
   tree t;
 
-  real_convert_from_fixed (&value, TYPE_MODE (type), &TREE_FIXED_CST (arg1));
+  real_convert_from_fixed (&value, SCALAR_FLOAT_TYPE_MODE (type),
+                          &TREE_FIXED_CST (arg1));
   t = build_real (type, value);
 
   TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
@@ -7057,7 +7058,7 @@ static int
 native_encode_real (const_tree expr, unsigned char *ptr, int len, int off)
 {
   tree type = TREE_TYPE (expr);
-  int total_bytes = GET_MODE_SIZE (TYPE_MODE (type));
+  int total_bytes = GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (type));
   int byte, offset, word, words, bitpos;
   unsigned char value;
 
@@ -7302,7 +7303,7 @@ native_interpret_fixed (tree type, const unsigned char *ptr, int len)
 static tree
 native_interpret_real (tree type, const unsigned char *ptr, int len)
 {
-  machine_mode mode = TYPE_MODE (type);
+  scalar_float_mode mode = SCALAR_FLOAT_TYPE_MODE (type);
   int total_bytes = GET_MODE_SIZE (mode);
   unsigned char value;
   /* There are always 32 bits in each long, no matter the size of
index fe2d80214a533fd849f12dd929b0cff7804174cf..6baf74f27bbeec1a9beec93cce349d638ab550c5 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * target-memory.c (size_float): Use SCALAR_FLOAT_TYPE_MODE
+       instead of TYPE_MODE.
+
 2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index d239cf114e12a1a756aec99179c6452d127961db..1c8de1c59aa3d2587e36bc8fb13d73d4b11ebe59 100644 (file)
@@ -46,7 +46,7 @@ size_integer (int kind)
 static size_t
 size_float (int kind)
 {
-  return GET_MODE_SIZE (TYPE_MODE (gfc_get_real_type (kind)));;
+  return GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (gfc_get_real_type (kind)));
 }
 
 
index 0f6cac57776b0850d5a555f996bdeec4415f2bdf..d15ce261ed2c543cb56fddae029a55eab69ed4d8 100644 (file)
@@ -910,7 +910,7 @@ emit_immediate_scalar_to_buffer (tree value, char *data, unsigned need_len)
                 "operands");
          return 2;
        }
-      unsigned int_len = GET_MODE_SIZE (TYPE_MODE (type));
+      unsigned int_len = GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (type));
       /* There are always 32 bits in each long, no matter the size of
         the hosts long.  */
       long tmp[6];
index 0e59ebf65daf9fd03f6dcb7d3f98f6edb9117596..8270c92e91e91bd1b20a0ba957a54282f61008f2 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * objc-encoding.c (encode_type): Use SCALAR_FLOAT_TYPE_MODE
+       instead of TYPE_MODE.
+
 2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index fa15c315f1f4fbeb590ddb30d8bced8e7174addd..bd59a29265e68504c99c4e64b0a97be309cc5032 100644 (file)
@@ -664,7 +664,7 @@ encode_type (tree type, int curtype, int format)
       {
        char c;
        /* Floating point types.  */
-       switch (GET_MODE_BITSIZE (TYPE_MODE (type)))
+       switch (GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)))
          {
          case 32:  c = 'f'; break;
          case 64:  c = 'd'; break;
index 268969700b62391d4f082becd8d2ff6794f65f78..4da6a2b3863114239e8bd5062db6c50229497ffa 100644 (file)
@@ -10094,7 +10094,8 @@ simplify_float_conversion_using_ranges (gimple_stmt_iterator *gsi,
 {
   tree rhs1 = gimple_assign_rhs1 (stmt);
   value_range *vr = get_value_range (rhs1);
-  machine_mode fltmode = TYPE_MODE (TREE_TYPE (gimple_assign_lhs (stmt)));
+  scalar_float_mode fltmode
+    = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (gimple_assign_lhs (stmt)));
   machine_mode mode;
   tree tem;
   gassign *conv;
index c855a4ccb5d14cbd3662ae6e6d0c176bf33fb52c..47dfa38b04578bc938430919f6b50c534eef0ed6 100644 (file)
@@ -1849,6 +1849,8 @@ extern void protected_set_expr_location (tree, location_t);
 #define TYPE_MODE(NODE) \
   (VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
    ? vector_type_mode (NODE) : (NODE)->type_common.mode)
+#define SCALAR_FLOAT_TYPE_MODE(NODE) \
+  (as_a <scalar_float_mode> (TYPE_CHECK (NODE)->type_common.mode))
 #define SET_TYPE_MODE(NODE, MODE) \
   (TYPE_CHECK (NODE)->type_common.mode = (MODE))