mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-23 18:01:22 +08:00
[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
This commit is contained in:
parent
3205ab28e6
commit
b5f2d801b1
@ -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>
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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];
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user