[74/77] Various small scalar_mode changes

Message ID 87a848btcn.fsf@linaro.org
State New
Headers show
Series
  • Add wrapper classes for machine_modes
Related show

Commit Message

Richard Sandiford July 13, 2017, 9:04 a.m.
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-07-13  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>.

Comments

Jeff Law Aug. 25, 2017, 4:45 p.m. | #1
On 07/13/2017 03:04 AM, Richard Sandiford wrote:
> 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-07-13  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>.

OK.
jeff

Patch

Index: gcc/machmode.h
===================================================================
--- gcc/machmode.h	2017-07-13 09:18:56.812392104 +0100
+++ gcc/machmode.h	2017-07-13 09:18:59.187223319 +0100
@@ -651,7 +651,7 @@  extern machine_mode bitwise_mode_for_mod
 /* 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
Index: gcc/stor-layout.c
===================================================================
--- gcc/stor-layout.c	2017-07-13 09:18:53.998596742 +0100
+++ gcc/stor-layout.c	2017-07-13 09:18:59.187223319 +0100
@@ -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;
 
Index: gcc/explow.c
===================================================================
--- gcc/explow.c	2017-07-13 09:18:54.682546579 +0100
+++ gcc/explow.c	2017-07-13 09:18:59.186223389 +0100
@@ -787,6 +787,7 @@  promote_mode (const_tree type ATTRIBUTE_
 #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_
     {
     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:
Index: gcc/sdbout.c
===================================================================
--- gcc/sdbout.c	2017-02-23 19:54:15.000000000 +0000
+++ gcc/sdbout.c	2017-07-13 09:18:59.187223319 +0100
@@ -1279,11 +1279,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