diff mbox series

[067/nnn] poly_int: get_mask_mode

Message ID 87tvypixkh.fsf@linaro.org
State New
Headers show
Series [067/nnn] poly_int: get_mask_mode | expand

Commit Message

Richard Sandiford Oct. 23, 2017, 5:27 p.m. UTC
This patch makes TARGET_GET_MASK_MODE take polynomial nunits and
vector_size arguments.  The gcc_assert in default_get_mask_mode
is now handled by the exact_div call in vector_element_size.


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

gcc/
	* target.def (get_mask_mode): Take the number of units and length
	as poly_uint64s rather than unsigned ints.
	* targhooks.h (default_get_mask_mode): Update accordingly.
	* targhooks.c (default_get_mask_mode): Likewise.
	* config/i386/i386.c (ix86_get_mask_mode): Likewise.
	* doc/tm.texi: Regenerate.

Comments

Jeff Law Nov. 28, 2017, 4:47 p.m. UTC | #1
On 10/23/2017 11:27 AM, Richard Sandiford wrote:
> This patch makes TARGET_GET_MASK_MODE take polynomial nunits and

> vector_size arguments.  The gcc_assert in default_get_mask_mode

> is now handled by the exact_div call in vector_element_size.

> 

> 

> 2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>

> 	    Alan Hayward  <alan.hayward@arm.com>

> 	    David Sherwood  <david.sherwood@arm.com>

> 

> gcc/

> 	* target.def (get_mask_mode): Take the number of units and length

> 	as poly_uint64s rather than unsigned ints.

> 	* targhooks.h (default_get_mask_mode): Update accordingly.

> 	* targhooks.c (default_get_mask_mode): Likewise.

> 	* config/i386/i386.c (ix86_get_mask_mode): Likewise.

> 	* doc/tm.texi: Regenerate.

>

OK.
jeff
diff mbox series

Patch

Index: gcc/target.def
===================================================================
--- gcc/target.def	2017-10-23 17:19:01.411170305 +0100
+++ gcc/target.def	2017-10-23 17:22:30.980383601 +0100
@@ -1901,7 +1901,7 @@  The default implementation returns the m
 is @var{length} bytes long and that contains @var{nunits} elements,\n\
 if such a mode exists.",
  opt_machine_mode,
- (unsigned nunits, unsigned length),
+ (poly_uint64 nunits, poly_uint64 length),
  default_get_mask_mode)
 
 /* Target builtin that implements vector gather operation.  */
Index: gcc/targhooks.h
===================================================================
--- gcc/targhooks.h	2017-10-23 17:19:01.411170305 +0100
+++ gcc/targhooks.h	2017-10-23 17:22:30.980383601 +0100
@@ -107,7 +107,7 @@  default_builtin_support_vector_misalignm
 					     int, bool);
 extern machine_mode default_preferred_simd_mode (scalar_mode mode);
 extern unsigned int default_autovectorize_vector_sizes (void);
-extern opt_machine_mode default_get_mask_mode (unsigned, unsigned);
+extern opt_machine_mode default_get_mask_mode (poly_uint64, poly_uint64);
 extern void *default_init_cost (struct loop *);
 extern unsigned default_add_stmt_cost (void *, int, enum vect_cost_for_stmt,
 				       struct _stmt_vec_info *, int,
Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c	2017-10-23 17:19:01.411170305 +0100
+++ gcc/targhooks.c	2017-10-23 17:22:30.980383601 +0100
@@ -1254,17 +1254,17 @@  default_autovectorize_vector_sizes (void
   return 0;
 }
 
-/* By defaults a vector of integers is used as a mask.  */
+/* By default a vector of integers is used as a mask.  */
 
 opt_machine_mode
-default_get_mask_mode (unsigned nunits, unsigned vector_size)
+default_get_mask_mode (poly_uint64 nunits, poly_uint64 vector_size)
 {
-  unsigned elem_size = vector_size / nunits;
+  unsigned int elem_size = vector_element_size (vector_size, nunits);
   scalar_int_mode elem_mode
     = smallest_int_mode_for_size (elem_size * BITS_PER_UNIT);
   machine_mode vector_mode;
 
-  gcc_assert (elem_size * nunits == vector_size);
+  gcc_assert (must_eq (elem_size * nunits, vector_size));
 
   if (mode_for_vector (elem_mode, nunits).exists (&vector_mode)
       && VECTOR_MODE_P (vector_mode)
Index: gcc/config/i386/i386.c
===================================================================
--- gcc/config/i386/i386.c	2017-10-23 17:19:01.404170211 +0100
+++ gcc/config/i386/i386.c	2017-10-23 17:22:30.978383200 +0100
@@ -48121,7 +48121,7 @@  ix86_autovectorize_vector_sizes (void)
 /* Implemenation of targetm.vectorize.get_mask_mode.  */
 
 static opt_machine_mode
-ix86_get_mask_mode (unsigned nunits, unsigned vector_size)
+ix86_get_mask_mode (poly_uint64 nunits, poly_uint64 vector_size)
 {
   unsigned elem_size = vector_size / nunits;
 
Index: gcc/doc/tm.texi
===================================================================
--- gcc/doc/tm.texi	2017-10-23 17:19:01.408170265 +0100
+++ gcc/doc/tm.texi	2017-10-23 17:22:30.979383401 +0100
@@ -5846,7 +5846,7 @@  mode returned by @code{TARGET_VECTORIZE_
 The default is zero which means to not iterate over other vector sizes.
 @end deftypefn
 
-@deftypefn {Target Hook} opt_machine_mode TARGET_VECTORIZE_GET_MASK_MODE (unsigned @var{nunits}, unsigned @var{length})
+@deftypefn {Target Hook} opt_machine_mode TARGET_VECTORIZE_GET_MASK_MODE (poly_uint64 @var{nunits}, poly_uint64 @var{length})
 A vector mask is a value that holds one boolean result for every element
 in a vector.  This hook returns the machine mode that should be used to
 represent such a mask when the vector in question is @var{length} bytes