Originally the SVE port used the names for 256-bit vectors, as the next available increment after Advanced SIMD. However, that was always a bit of a hack and is bound to confuse people new to the code.
Nothing actually requires vector modes to have names of the form V<nunits><mode>, and after talking it over with the AArch64 maintainers, we agreed to switch to things like: VNx16QI instead. This patch lets targets pick this kind of prefix. Tested on aarch64-linux-gnu (with and without SVE), x86_64-linux-gnu an powerpc64le-linux-gnu. I'll apply this under the gen* maintainership when the SVE port itself has been approved. Thanks, Richard 2017-11-17 Richard Sandiford <richard.sandif...@linaro.org> gcc/ * machmode.def (VECTOR_MODES_WITH_PREFIX): Document. * genmodes.c (VECTOR_MODES_WITH_PREFIX): New macro. (VECTOR_MODES): Use it. (make_vector_modes): Take the prefix as an argument. Index: gcc/machmode.def =================================================================== --- gcc/machmode.def 2017-11-17 21:46:15.177979825 +0000 +++ gcc/machmode.def 2017-11-17 21:46:25.555622937 +0000 @@ -142,6 +142,10 @@ along with GCC; see the file COPYING3. than two bytes (if CLASS is FLOAT). CLASS must be INT or FLOAT. The names follow the same rule as VECTOR_MODE uses. + VECTOR_MODES_WITH_PREFIX (PREFIX, CLASS, WIDTH); + Like VECTOR_MODES, but start the mode names with PREFIX instead + of the usual "V". + VECTOR_BOOL_MODE (NAME, COUNT, BYTESIZE) Create a vector mode called NAME that contains COUNT boolean elements and occupies BYTESIZE bytes in total. Each boolean Index: gcc/genmodes.c =================================================================== --- gcc/genmodes.c 2017-11-17 21:46:15.177050178 +0000 +++ gcc/genmodes.c 2017-11-17 21:46:25.554693290 +0000 @@ -483,9 +483,11 @@ make_complex_modes (enum mode_class cl, /* For all modes in class CL, construct vector modes of width WIDTH, having as many components as necessary. */ -#define VECTOR_MODES(C, W) make_vector_modes (MODE_##C, W, __FILE__, __LINE__) +#define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W) \ + make_vector_modes (MODE_##C, #PREFIX, W, __FILE__, __LINE__) +#define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W) static void ATTRIBUTE_UNUSED -make_vector_modes (enum mode_class cl, unsigned int width, +make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width, const char *file, unsigned int line) { struct mode_data *m; @@ -516,8 +518,8 @@ make_vector_modes (enum mode_class cl, u if (cl == MODE_INT && m->precision == 1) continue; - if ((size_t)snprintf (buf, sizeof buf, "V%u%s", ncomponents, m->name) - >= sizeof buf) + if ((size_t) snprintf (buf, sizeof buf, "%s%u%s", prefix, + ncomponents, m->name) >= sizeof buf) { error ("%s:%d: mode name \"%s\" is too long", m->file, m->line, m->name);