Commit 79d22165 by Richard Sandiford Committed by Richard Sandiford

[74/77] Various small scalar_mode changes

This patch uses scalar_mode in a few miscellaneous places:

- Previous patches mean mode_to_vector can take a scalar_mode without
  further changes.

- Implicit promotion is limited to scalar types (affects promote_mode
  and sdbout_parms)

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

gcc/
	* machmode.h (mode_for_vector): Take a scalar_mode instead
	of a machine_mode.
	* stor-layout.c (mode_for_vector): Likewise.
	* explow.c (promote_mode): Use as_a <scalar_mode>.
	* sdbout.c (sdbout_parms): Use is_a <scalar_mode>.

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

From-SVN: r251525
parent 005ba29c
...@@ -2,6 +2,16 @@ ...@@ -2,6 +2,16 @@
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
* machmode.h (mode_for_vector): Take a scalar_mode instead
of a machine_mode.
* stor-layout.c (mode_for_vector): Likewise.
* explow.c (promote_mode): Use as_a <scalar_mode>.
* sdbout.c (sdbout_parms): Use is_a <scalar_mode>.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* target.def (preferred_simd_mode): Take a scalar_mode * target.def (preferred_simd_mode): Take a scalar_mode
instead of a machine_mode. instead of a machine_mode.
* targhooks.h (default_preferred_simd_mode): Likewise. * targhooks.h (default_preferred_simd_mode): Likewise.
......
...@@ -787,6 +787,7 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode, ...@@ -787,6 +787,7 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
#ifdef PROMOTE_MODE #ifdef PROMOTE_MODE
enum tree_code code; enum tree_code code;
int unsignedp; int unsignedp;
scalar_mode smode;
#endif #endif
/* For libcalls this is invoked without TYPE from the backends /* For libcalls this is invoked without TYPE from the backends
...@@ -806,9 +807,11 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode, ...@@ -806,9 +807,11 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
{ {
case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
case REAL_TYPE: case OFFSET_TYPE: case FIXED_POINT_TYPE: case REAL_TYPE: case OFFSET_TYPE: case FIXED_POINT_TYPE:
PROMOTE_MODE (mode, unsignedp, type); /* Values of these types always have scalar mode. */
smode = as_a <scalar_mode> (mode);
PROMOTE_MODE (smode, unsignedp, type);
*punsignedp = unsignedp; *punsignedp = unsignedp;
return mode; return smode;
#ifdef POINTERS_EXTEND_UNSIGNED #ifdef POINTERS_EXTEND_UNSIGNED
case REFERENCE_TYPE: case REFERENCE_TYPE:
......
...@@ -650,7 +650,7 @@ extern machine_mode bitwise_mode_for_mode (machine_mode); ...@@ -650,7 +650,7 @@ extern machine_mode bitwise_mode_for_mode (machine_mode);
/* Return a mode that is suitable for representing a vector, /* Return a mode that is suitable for representing a vector,
or BLKmode on failure. */ or BLKmode on failure. */
extern machine_mode mode_for_vector (machine_mode, unsigned); extern machine_mode mode_for_vector (scalar_mode, unsigned);
/* A class for iterating through possible bitfield modes. */ /* A class for iterating through possible bitfield modes. */
class bit_field_mode_iterator class bit_field_mode_iterator
......
...@@ -1281,11 +1281,15 @@ sdbout_parms (tree parms) ...@@ -1281,11 +1281,15 @@ sdbout_parms (tree parms)
the parm with the variable's declared type, and adjust the parm with the variable's declared type, and adjust
the address if the least significant bytes (which we are the address if the least significant bytes (which we are
using) are not the first ones. */ using) are not the first ones. */
scalar_mode from_mode, to_mode;
if (BYTES_BIG_ENDIAN if (BYTES_BIG_ENDIAN
&& TREE_TYPE (parms) != DECL_ARG_TYPE (parms)) && TREE_TYPE (parms) != DECL_ARG_TYPE (parms)
current_sym_value += && is_a <scalar_mode> (TYPE_MODE (DECL_ARG_TYPE (parms)),
(GET_MODE_SIZE (TYPE_MODE (DECL_ARG_TYPE (parms))) &from_mode)
- GET_MODE_SIZE (GET_MODE (DECL_RTL (parms)))); && is_a <scalar_mode> (GET_MODE (DECL_RTL (parms)),
&to_mode))
current_sym_value += (GET_MODE_SIZE (from_mode)
- GET_MODE_SIZE (to_mode));
if (MEM_P (DECL_RTL (parms)) if (MEM_P (DECL_RTL (parms))
&& GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS && GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS
......
...@@ -478,7 +478,7 @@ bitwise_type_for_mode (machine_mode mode) ...@@ -478,7 +478,7 @@ bitwise_type_for_mode (machine_mode mode)
is no suitable mode. */ is no suitable mode. */
machine_mode machine_mode
mode_for_vector (machine_mode innermode, unsigned nunits) mode_for_vector (scalar_mode innermode, unsigned nunits)
{ {
machine_mode mode; machine_mode mode;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment