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 @@
Alan Hayward <alan.hayward@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
instead of a machine_mode.
* targhooks.h (default_preferred_simd_mode): Likewise.
......
......@@ -787,6 +787,7 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
#ifdef PROMOTE_MODE
enum tree_code code;
int unsignedp;
scalar_mode smode;
#endif
/* For libcalls this is invoked without TYPE from the backends
......@@ -806,9 +807,11 @@ promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
{
case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_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;
return mode;
return smode;
#ifdef POINTERS_EXTEND_UNSIGNED
case REFERENCE_TYPE:
......
......@@ -650,7 +650,7 @@ extern machine_mode bitwise_mode_for_mode (machine_mode);
/* Return a mode that is suitable for representing a vector,
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. */
class bit_field_mode_iterator
......
......@@ -1281,11 +1281,15 @@ sdbout_parms (tree parms)
the parm with the variable's declared type, and adjust
the address if the least significant bytes (which we are
using) are not the first ones. */
scalar_mode from_mode, to_mode;
if (BYTES_BIG_ENDIAN
&& TREE_TYPE (parms) != DECL_ARG_TYPE (parms))
current_sym_value +=
(GET_MODE_SIZE (TYPE_MODE (DECL_ARG_TYPE (parms)))
- GET_MODE_SIZE (GET_MODE (DECL_RTL (parms))));
&& TREE_TYPE (parms) != DECL_ARG_TYPE (parms)
&& is_a <scalar_mode> (TYPE_MODE (DECL_ARG_TYPE (parms)),
&from_mode)
&& 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))
&& GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS
......
......@@ -478,7 +478,7 @@ bitwise_type_for_mode (machine_mode mode)
is no suitable mode. */
machine_mode
mode_for_vector (machine_mode innermode, unsigned nunits)
mode_for_vector (scalar_mode innermode, unsigned nunits)
{
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