[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>
|
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
|
||||||
Alan Hayward <alan.hayward@arm.com>
|
Alan Hayward <alan.hayward@arm.com>
|
||||||
David Sherwood <david.sherwood@arm.com>
|
David Sherwood <david.sherwood@arm.com>
|
||||||
|
@ -5301,7 +5301,8 @@ static rtx
|
|||||||
expand_builtin_signbit (tree exp, rtx target)
|
expand_builtin_signbit (tree exp, rtx target)
|
||||||
{
|
{
|
||||||
const struct real_format *fmt;
|
const struct real_format *fmt;
|
||||||
machine_mode fmode, imode, rmode;
|
scalar_float_mode fmode;
|
||||||
|
machine_mode imode, rmode;
|
||||||
tree arg;
|
tree arg;
|
||||||
int word, bitpos;
|
int word, bitpos;
|
||||||
enum insn_code icode;
|
enum insn_code icode;
|
||||||
@ -5312,7 +5313,7 @@ expand_builtin_signbit (tree exp, rtx target)
|
|||||||
return NULL_RTX;
|
return NULL_RTX;
|
||||||
|
|
||||||
arg = CALL_EXPR_ARG (exp, 0);
|
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));
|
rmode = TYPE_MODE (TREE_TYPE (exp));
|
||||||
fmt = REAL_MODE_FORMAT (fmode);
|
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>
|
2017-08-29 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/81236 - ICE with template-id in generic lambda
|
PR c++/81236 - ICE with template-id in generic lambda
|
||||||
|
@ -1788,7 +1788,7 @@ write_real_cst (const tree value)
|
|||||||
int i, limit, dir;
|
int i, limit, dir;
|
||||||
|
|
||||||
tree type = TREE_TYPE (value);
|
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),
|
real_to_target (target_real, &TREE_REAL_CST (value),
|
||||||
TYPE_MODE (type));
|
TYPE_MODE (type));
|
||||||
|
@ -2032,7 +2032,8 @@ fold_convert_const_real_from_fixed (tree type, const_tree arg1)
|
|||||||
REAL_VALUE_TYPE value;
|
REAL_VALUE_TYPE value;
|
||||||
tree t;
|
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);
|
t = build_real (type, value);
|
||||||
|
|
||||||
TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
|
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)
|
native_encode_real (const_tree expr, unsigned char *ptr, int len, int off)
|
||||||
{
|
{
|
||||||
tree type = TREE_TYPE (expr);
|
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;
|
int byte, offset, word, words, bitpos;
|
||||||
unsigned char value;
|
unsigned char value;
|
||||||
|
|
||||||
@ -7302,7 +7303,7 @@ native_interpret_fixed (tree type, const unsigned char *ptr, int len)
|
|||||||
static tree
|
static tree
|
||||||
native_interpret_real (tree type, const unsigned char *ptr, int len)
|
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);
|
int total_bytes = GET_MODE_SIZE (mode);
|
||||||
unsigned char value;
|
unsigned char value;
|
||||||
/* There are always 32 bits in each long, no matter the size of
|
/* 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>
|
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
|
||||||
Alan Hayward <alan.hayward@arm.com>
|
Alan Hayward <alan.hayward@arm.com>
|
||||||
David Sherwood <david.sherwood@arm.com>
|
David Sherwood <david.sherwood@arm.com>
|
||||||
|
@ -46,7 +46,7 @@ size_integer (int kind)
|
|||||||
static size_t
|
static size_t
|
||||||
size_float (int kind)
|
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");
|
"operands");
|
||||||
return 2;
|
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
|
/* There are always 32 bits in each long, no matter the size of
|
||||||
the hosts long. */
|
the hosts long. */
|
||||||
long tmp[6];
|
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>
|
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
|
||||||
Alan Hayward <alan.hayward@arm.com>
|
Alan Hayward <alan.hayward@arm.com>
|
||||||
David Sherwood <david.sherwood@arm.com>
|
David Sherwood <david.sherwood@arm.com>
|
||||||
|
@ -664,7 +664,7 @@ encode_type (tree type, int curtype, int format)
|
|||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
/* Floating point types. */
|
/* 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 32: c = 'f'; break;
|
||||||
case 64: c = 'd'; 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);
|
tree rhs1 = gimple_assign_rhs1 (stmt);
|
||||||
value_range *vr = get_value_range (rhs1);
|
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;
|
machine_mode mode;
|
||||||
tree tem;
|
tree tem;
|
||||||
gassign *conv;
|
gassign *conv;
|
||||||
|
@ -1849,6 +1849,8 @@ extern void protected_set_expr_location (tree, location_t);
|
|||||||
#define TYPE_MODE(NODE) \
|
#define TYPE_MODE(NODE) \
|
||||||
(VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
|
(VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
|
||||||
? vector_type_mode (NODE) : (NODE)->type_common.mode)
|
? 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) \
|
#define SET_TYPE_MODE(NODE, MODE) \
|
||||||
(TYPE_CHECK (NODE)->type_common.mode = (MODE))
|
(TYPE_CHECK (NODE)->type_common.mode = (MODE))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user