diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-08-30 11:09:27 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:09:27 +0000 |
commit | b5f2d801b10c25ef32a80c03d6df8668920a593c (patch) | |
tree | 7128c82384620d1aa931e09c93420443dbee1554 /gcc/fold-const.c | |
parent | 3205ab28e639b69e5979f9d8336e2be75f681661 (diff) | |
download | gcc-b5f2d801b10c25ef32a80c03d6df8668920a593c.zip gcc-b5f2d801b10c25ef32a80c03d6df8668920a593c.tar.gz gcc-b5f2d801b10c25ef32a80c03d6df8668920a593c.tar.bz2 |
[9/77] Add SCALAR_FLOAT_TYPE_MODE
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
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index de60f68..27f4f4e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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 |