diff mbox series

rs6000: Built-in cleanups for vec_clzm, vec_ctzm, and vec_gnb.

Message ID 20200510010834.122434-1-wschmidt@linux.ibm.com
State New
Headers show
Series rs6000: Built-in cleanups for vec_clzm, vec_ctzm, and vec_gnb. | expand

Commit Message

Bill Schmidt May 10, 2020, 1:08 a.m. UTC
From: Kelvin Nilsen <kelvin@gcc.gnu.org>

Changes to the built-in specification occurred after early patches
added support for these.  The name of vec_clzm became vec_cntlzm,
and vec_ctzm became vec_cnttzm.  Four of the overloaded forms of
vec_gnb were removed, and the fourth argument redefined as an
unsigned int, not an unsigned char.  This patch reflects those
changes in the code and test cases.  Eight of the vec_gnb test
cases are removed as a result.

I should have noticed this patch before submitting Kelvin's earlier
related patches, sorry.  I think it should still be fine to apply
the patches in order, but if you'd like me to combine this into the
two earlier ones, I'd be happy to do that.

Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no
regressions, using a Power9 configuration.  Is this okay for master?

Thanks,
Bill

[gcc]

2020-05-09  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/altivec.h (vec_clzm): Rename to vec_cntlzm.
	(vec_ctzm): Rename to vec_cnttzm.
	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Change fourth operand for vec_ternarylogic to require
	compatibility with unsigned SImode rather than unsigned QImode.
	* config/rs6000/rs6000-call.c (altivec_overloaded_builtins):
	Remove overloaded forms of vec_gnb that are no longer needed.
	* doc/extend.texi (PowerPC AltiVec Built-in Functions Available
	for a Future Architecture): Replace vec_clzm with vec_cntlzm;
	replace vec_ctzm with vec_cntlzm; remove four unwanted forms of
	vec_gnb; move vec_ternarylogic documentation into this section
	and replace const unsigned char with const unsigned int as its
	fourth argument.

[gcc/testsuite]

2020-05-09  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/vec-clzm-0.c: Rename to...
	* gcc.target/powerpc/vec-cntlzm-0.c: ...this.
	* gcc.target/powerpc/vec-clzm-1.c: Rename to...
	* gcc.target/powerpc/vec-cntlzm-1.c: ...this.
	* gcc.target/powerpc/vec-ctzm-0.c: Rename to...
	* gcc.target/powerpc/vec-cnttzm-0.c: ...this.
	* gcc.target/powerpc/vec-ctzm-1.c: Rename to...
	* gcc.target/powerpc/vec-cnttzm-1.c: ...this.
	* gcc.target/powerpc/vec-gnb-8.c: Rename to...
	* gcc.target/powerpc/vec-gnb-0.c: ...this, deleting the old file.
	* gcc.target/powerpc/vec-gnb-9.c: Rename to...
	* gcc.target/powerpc/vec-gnb-1.c: ...this, deleting the old file.
	* gcc.target/powerpc/vec-gnb-10.c: Rename to...
	* gcc.target/powerpc/vec-gnb-2.c: ...this, deleting the old file.
	* gcc.target/powerpc/vec-gnb-3.c: Delete.
	* gcc.target/powerpc/vec-gnb-4.c: Delete.
	* gcc.target/powerpc/vec-gnb-5.c: Delete.
	* gcc.target/powerpc/vec-gnb-6.c: Delete.
	* gcc.target/powerpc/vec-gnb-7.c: Delete.
---
 gcc/config/rs6000/altivec.h                   |  4 +-
 gcc/config/rs6000/rs6000-c.c                  |  2 +-
 gcc/config/rs6000/rs6000-call.c               |  8 --
 gcc/doc/extend.texi                           | 60 +++++++--------
 .../powerpc/{vec-clzm-0.c => vec-cntlzm-0.c}  | 12 +--
 .../powerpc/{vec-clzm-1.c => vec-cntlzm-1.c}  | 12 +--
 .../powerpc/{vec-ctzm-0.c => vec-cnttzm-0.c}  | 12 +--
 .../powerpc/{vec-ctzm-1.c => vec-cnttzm-1.c}  | 12 +--
 gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c  | 22 +++---
 gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c  | 23 +++---
 gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c | 72 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c  | 31 ++++----
 gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c  | 72 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c  | 71 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c  | 71 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c  | 71 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c  | 71 ------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c  | 75 -------------------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c  | 74 ------------------
 19 files changed, 88 insertions(+), 687 deletions(-)
 rename gcc/testsuite/gcc.target/powerpc/{vec-clzm-0.c => vec-cntlzm-0.c} (79%)
 rename gcc/testsuite/gcc.target/powerpc/{vec-clzm-1.c => vec-cntlzm-1.c} (79%)
 rename gcc/testsuite/gcc.target/powerpc/{vec-ctzm-0.c => vec-cnttzm-0.c} (79%)
 rename gcc/testsuite/gcc.target/powerpc/{vec-ctzm-1.c => vec-cnttzm-1.c} (79%)
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c

Comments

David Edelsohn May 10, 2020, 1:22 a.m. UTC | #1
On Sat, May 9, 2020 at 9:08 PM Bill Schmidt <wschmidt@linux.ibm.com> wrote:
>
> From: Kelvin Nilsen <kelvin@gcc.gnu.org>
>
> Changes to the built-in specification occurred after early patches
> added support for these.  The name of vec_clzm became vec_cntlzm,
> and vec_ctzm became vec_cnttzm.  Four of the overloaded forms of
> vec_gnb were removed, and the fourth argument redefined as an
> unsigned int, not an unsigned char.  This patch reflects those
> changes in the code and test cases.  Eight of the vec_gnb test
> cases are removed as a result.
>
> I should have noticed this patch before submitting Kelvin's earlier
> related patches, sorry.  I think it should still be fine to apply
> the patches in order, but if you'd like me to combine this into the
> two earlier ones, I'd be happy to do that.
>
> Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no
> regressions, using a Power9 configuration.  Is this okay for master?
>
> Thanks,
> Bill
>
> [gcc]
>
> 2020-05-09  Kelvin Nilsen  <kelvin@gcc.gnu.org>
>
>         * config/rs6000/altivec.h (vec_clzm): Rename to vec_cntlzm.
>         (vec_ctzm): Rename to vec_cnttzm.
>         * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
>         Change fourth operand for vec_ternarylogic to require
>         compatibility with unsigned SImode rather than unsigned QImode.
>         * config/rs6000/rs6000-call.c (altivec_overloaded_builtins):
>         Remove overloaded forms of vec_gnb that are no longer needed.
>         * doc/extend.texi (PowerPC AltiVec Built-in Functions Available
>         for a Future Architecture): Replace vec_clzm with vec_cntlzm;
>         replace vec_ctzm with vec_cntlzm; remove four unwanted forms of
>         vec_gnb; move vec_ternarylogic documentation into this section
>         and replace const unsigned char with const unsigned int as its
>         fourth argument.
>
> [gcc/testsuite]
>
> 2020-05-09  Kelvin Nilsen  <kelvin@gcc.gnu.org>
>
>         * gcc.target/powerpc/vec-clzm-0.c: Rename to...
>         * gcc.target/powerpc/vec-cntlzm-0.c: ...this.
>         * gcc.target/powerpc/vec-clzm-1.c: Rename to...
>         * gcc.target/powerpc/vec-cntlzm-1.c: ...this.
>         * gcc.target/powerpc/vec-ctzm-0.c: Rename to...
>         * gcc.target/powerpc/vec-cnttzm-0.c: ...this.
>         * gcc.target/powerpc/vec-ctzm-1.c: Rename to...
>         * gcc.target/powerpc/vec-cnttzm-1.c: ...this.
>         * gcc.target/powerpc/vec-gnb-8.c: Rename to...
>         * gcc.target/powerpc/vec-gnb-0.c: ...this, deleting the old file.
>         * gcc.target/powerpc/vec-gnb-9.c: Rename to...
>         * gcc.target/powerpc/vec-gnb-1.c: ...this, deleting the old file.
>         * gcc.target/powerpc/vec-gnb-10.c: Rename to...
>         * gcc.target/powerpc/vec-gnb-2.c: ...this, deleting the old file.
>         * gcc.target/powerpc/vec-gnb-3.c: Delete.
>         * gcc.target/powerpc/vec-gnb-4.c: Delete.
>         * gcc.target/powerpc/vec-gnb-5.c: Delete.
>         * gcc.target/powerpc/vec-gnb-6.c: Delete.
>         * gcc.target/powerpc/vec-gnb-7.c: Delete.

This is okay, modulo comments from Segher.

Thanks, David

> ---
>  gcc/config/rs6000/altivec.h                   |  4 +-
>  gcc/config/rs6000/rs6000-c.c                  |  2 +-
>  gcc/config/rs6000/rs6000-call.c               |  8 --
>  gcc/doc/extend.texi                           | 60 +++++++--------
>  .../powerpc/{vec-clzm-0.c => vec-cntlzm-0.c}  | 12 +--
>  .../powerpc/{vec-clzm-1.c => vec-cntlzm-1.c}  | 12 +--
>  .../powerpc/{vec-ctzm-0.c => vec-cnttzm-0.c}  | 12 +--
>  .../powerpc/{vec-ctzm-1.c => vec-cnttzm-1.c}  | 12 +--
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c  | 22 +++---
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c  | 23 +++---
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c | 72 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c  | 31 ++++----
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c  | 72 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c  | 71 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c  | 71 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c  | 71 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c  | 71 ------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c  | 75 -------------------
>  gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c  | 74 ------------------
>  19 files changed, 88 insertions(+), 687 deletions(-)
>  rename gcc/testsuite/gcc.target/powerpc/{vec-clzm-0.c => vec-cntlzm-0.c} (79%)
>  rename gcc/testsuite/gcc.target/powerpc/{vec-clzm-1.c => vec-cntlzm-1.c} (79%)
>  rename gcc/testsuite/gcc.target/powerpc/{vec-ctzm-0.c => vec-cnttzm-0.c} (79%)
>  rename gcc/testsuite/gcc.target/powerpc/{vec-ctzm-1.c => vec-cnttzm-1.c} (79%)
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
>  delete mode 100644 gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c
>
> diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
> index 3729ceaf336..85c5626877d 100644
> --- a/gcc/config/rs6000/altivec.h
> +++ b/gcc/config/rs6000/altivec.h
> @@ -689,8 +689,8 @@ __altivec_scalar_pred(vec_any_nle,
>  #ifdef _ARCH_PWR_FUTURE
>  /* May modify these macro definitions if future capabilities overload
>     with support for different vector argument and result types.  */
> -#define vec_clzm(a, b) __builtin_altivec_vclzdm (a, b)
> -#define vec_ctzm(a, b) __builtin_altivec_vctzdm (a, b)
> +#define vec_cntlzm(a, b)       __builtin_altivec_vclzdm (a, b)
> +#define vec_cnttzm(a, b)       __builtin_altivec_vctzdm (a, b)
>  #define vec_pdep(a, b) __builtin_altivec_vpdepd (a, b)
>  #define vec_pext(a, b) __builtin_altivec_vpextd (a, b)
>  #define vec_cfuge(a, b)        __builtin_altivec_vcfuged (a, b)
> diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
> index cacaea00bd4..07ca33a89b4 100644
> --- a/gcc/config/rs6000/rs6000-c.c
> +++ b/gcc/config/rs6000/rs6000-c.c
> @@ -1813,7 +1813,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
>                 && rs6000_builtin_type_compatible (types[1], desc->op2)
>                 && rs6000_builtin_type_compatible (types[2], desc->op3)
>                 && rs6000_builtin_type_compatible (types[3],
> -                                                  RS6000_BTI_UINTQI))
> +                                                  RS6000_BTI_UINTSI))
>               {
>                 if (rs6000_builtin_decls[desc->overloaded_code] == NULL_TREE)
>                   unsupported_builtin = true;
> diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
> index 0b9ed7ef018..d6fa1a86c04 100644
> --- a/gcc/config/rs6000/rs6000-call.c
> +++ b/gcc/config/rs6000/rs6000-call.c
> @@ -5522,14 +5522,6 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
>      RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
>      RS6000_BTI_UINTSI, 0 },
>
> -  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
> -    RS6000_BTI_unsigned_V16QI, RS6000_BTI_UINTQI, 0 },
> -  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
> -    RS6000_BTI_unsigned_V8HI, RS6000_BTI_UINTQI, 0 },
> -  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
> -    RS6000_BTI_unsigned_V4SI, RS6000_BTI_UINTQI, 0 },
> -  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
> -    RS6000_BTI_unsigned_V2DI, RS6000_BTI_UINTQI, 0 },
>    { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
>      RS6000_BTI_unsigned_V1TI, RS6000_BTI_UINTQI, 0 },
>    { FUTURE_BUILTIN_VEC_XXGENPCVM, FUTURE_BUILTIN_XXGENPCVM_V2DI,
> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
> index c352c512285..4c5ed3f3bac 100644
> --- a/gcc/doc/extend.texi
> +++ b/gcc/doc/extend.texi
> @@ -20762,19 +20762,19 @@ Perform a vector centrifuge operation, as if implemented by the Future
>
>  @smallexample
>  @exdent vector unsigned long long int
> -@exdent vec_clzm (vector unsigned long long int, vector unsigned long long int)
> +@exdent vec_cntlzm (vector unsigned long long int, vector unsigned long long int)
>  @end smallexample
>  Perform a vector count leading zeros under bit mask operation, as if
>  implemented by the Future @code{vclzdm} instruction.
> -@findex vec_clzm
> +@findex vec_cntlzm
>
>  @smallexample
>  @exdent vector unsigned long long int
> -@exdent vec_ctzm (vector unsigned long long int, vector unsigned long long int)
> +@exdent vec_cnttzm (vector unsigned long long int, vector unsigned long long int)
>  @end smallexample
>  Perform a vector count trailing zeros under bit mask operation, as if
>  implemented by the Future @code{vctzdm} instruction.
> -@findex vec_ctzm
> +@findex vec_cnttzm
>
>  @smallexample
>  @exdent vector signed char
> @@ -20802,14 +20802,6 @@ value of @code{n} that is greater than 16 is treated as if it equaled 16.
>
>  @smallexample
>  @exdent vector unsigned long long int
> -@exdent vec_gnb (vector unsigned char, const unsigned char)
> -@exdent vector unsigned long long int
> -@exdent vec_gnb (vector unsigned short, const unsigned char)
> -@exdent vector unsigned long long int
> -@exdent vec_gnb (vector unsigned int, const unsigned char)
> -@exdent vector unsigned long long int
> -@exdent vec_gnb (vector unsigned long long int, const unsigned char)
> -@exdent vector unsigned long long int
>  @exdent vec_gnb (vector unsigned __int128, const unsigned char)
>  @end smallexample
>  Perform a 128-bit vector gather  operation, as if implemented by the Future
> @@ -20889,6 +20881,28 @@ little-endian targets.  Choose this built-in to check for presence of
>  zero element if the same argument is also passed to @code{vec_strir}.
>  @findex vec_strir_p
>
> +@smallexample
> +@exdent vector unsigned char
> +@exdent vec_ternarylogic (vector unsigned char, vector unsigned char,
> +            vector unsigned char, const unsigned int)
> +@exdent vector unsigned short
> +@exdent vec_ternarylogic (vector unsigned short, vector unsigned short,
> +            vector unsigned short, const unsigned int)
> +@exdent vector unsigned int
> +@exdent vec_ternarylogic (vector unsigned int, vector unsigned int,
> +            vector unsigned int, const unsigned int)
> +@exdent vector unsigned long long int
> +@exdent vec_ternarylogic (vector unsigned long long int, vector unsigned long long int,
> +            vector unsigned long long int, const unsigned int)
> +@exdent vector unsigned __int128
> +@exdent vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
> +            vector unsigned __int128, const unsigned int)
> +@end smallexample
> +Perform a 128-bit vector evaluate operation, as if implemented by the
> +Future @code{xxeval} instruction.  The fourth argument must be a literal
> +integer value between 0 and 255 inclusive.
> +@findex vec_ternarylogic
> +
>  @smallexample
>  @exdent vector unsigned char vec_genpcvm (vector unsigned char, const int)
>  @exdent vector unsigned short vec_genpcvm (vector unsigned short, const int)
> @@ -22123,28 +22137,6 @@ else
>  @end smallexample
>  @end deftypefn
>
> -@smallexample
> -@exdent vector unsigned char
> -@exdent vec_ternarylogic (vector unsigned char, vector unsigned char,
> -            vector unsigned char, const unsigned char)
> -@exdent vector unsigned short
> -@exdent vec_ternarylogic (vector unsigned short, vector unsigned short,
> -            vector unsigned short, const unsigned char)
> -@exdent vector unsigned int
> -@exdent vec_ternarylogic (vector unsigned int, vector unsigned int,
> -            vector unsigned int, const unsigned char)
> -@exdent vector unsigned long long int
> -@exdent vec_ternarylogic (vector unsigned long long int, vector unsigned long long int,
> -            vector unsigned long long int, const unsigned char)
> -@exdent vector unsigned __int128
> -@exdent vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
> -            vector unsigned __int128, const unsigned char)
> -@end smallexample
> -Perform a 128-bit vector evaluate operation, as if implemented by the
> -Future @code{xxeval} instruction.  The fourth argument must be a literal
> -integer value between 0 and 255 inclusive.
> -@findex vec_ternarylogic
> -
>  The following built-in functions are made available by @option{-mmmx}.
>  All of them generate the machine instruction that is part of the name.
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
> similarity index 79%
> rename from gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c
> rename to gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
> index 099c5dc99bf..6fe0cbd8875 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
> @@ -6,10 +6,10 @@
>  extern void abort (void);
>
>  vector unsigned long long int
> -do_vec_clzm (vector unsigned long long int source,
> +do_vec_cntlzm (vector unsigned long long int source,
>              vector unsigned long long int mask)
>  {
> -  return vec_clzm (source, mask);
> +  return vec_cntlzm (source, mask);
>  }
>
>  int main (int argc, char *argv [])
> @@ -39,13 +39,13 @@ int main (int argc, char *argv [])
>    vector unsigned long long int result_ba = { 2, 0 };
>    vector unsigned long long int result_bb = { 0, 1 };
>
> -  if (!vec_all_eq (do_vec_clzm (source_a, mask_a), result_aa))
> +  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_a), result_aa))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_a, mask_b), result_ab))
> +  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_b), result_ab))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_b, mask_a), result_ba))
> +  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_a), result_ba))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_b, mask_b), result_bb))
> +  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_b), result_bb))
>      abort ();
>
>    return 0;
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
> similarity index 79%
> rename from gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c
> rename to gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
> index 43b86114487..7e058ed8843 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
> @@ -7,10 +7,10 @@
>  extern void abort (void);
>
>  vector unsigned long long int
> -do_vec_clzm (vector unsigned long long int source,
> +do_vec_cntlzm (vector unsigned long long int source,
>              vector unsigned long long int mask)
>  {
> -  return vec_clzm (source, mask);
> +  return vec_cntlzm (source, mask);
>  }
>
>  int main (int argc, char *argv [])
> @@ -40,13 +40,13 @@ int main (int argc, char *argv [])
>    vector unsigned long long int result_ba = { 2, 0 };
>    vector unsigned long long int result_bb = { 0, 1 };
>
> -  if (!vec_all_eq (do_vec_clzm (source_a, mask_a), result_aa))
> +  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_a), result_aa))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_a, mask_b), result_ab))
> +  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_b), result_ab))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_b, mask_a), result_ba))
> +  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_a), result_ba))
>      abort ();
> -  if (!vec_all_eq (do_vec_clzm (source_b, mask_b), result_bb))
> +  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_b), result_bb))
>      abort ();
>
>    return 0;
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
> similarity index 79%
> rename from gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c
> rename to gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
> index 315edf4d4cd..94fac3bf817 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
> @@ -6,10 +6,10 @@
>  extern void abort (void);
>
>  vector unsigned long long int
> -do_vec_ctzm (vector unsigned long long int source,
> +do_vec_cnttzm (vector unsigned long long int source,
>              vector unsigned long long int mask)
>  {
> -  return vec_ctzm (source, mask);
> +  return vec_cnttzm (source, mask);
>  }
>
>  int main (int argc, char *argv [])
> @@ -39,13 +39,13 @@ int main (int argc, char *argv [])
>    vector unsigned long long int result_ba = { 0, 0 };
>    vector unsigned long long int result_bb = { 1, 2 };
>
> -  if (!vec_all_eq (do_vec_ctzm (source_a, mask_a), result_aa))
> +  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_a), result_aa))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_a, mask_b), result_ab))
> +  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_b), result_ab))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_b, mask_a),result_ba))
> +  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_a),result_ba))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_b, mask_b), result_bb))
> +  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_b), result_bb))
>      abort ();
>
>    return 0;
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
> similarity index 79%
> rename from gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c
> rename to gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
> index 3dc4a03ab09..27ff3bd4961 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
> @@ -7,10 +7,10 @@
>  extern void abort (void);
>
>  vector unsigned long long int
> -do_vec_ctzm (vector unsigned long long int source,
> +do_vec_cnttzm (vector unsigned long long int source,
>              vector unsigned long long int mask)
>  {
> -  return vec_ctzm (source, mask);
> +  return vec_cnttzm (source, mask);
>  }
>
>  int main (int argc, char *argv [])
> @@ -40,13 +40,13 @@ int main (int argc, char *argv [])
>    vector unsigned long long int result_ba = { 0, 0 };
>    vector unsigned long long int result_bb = { 1, 2 };
>
> -  if (!vec_all_eq (do_vec_ctzm (source_a, mask_a), result_aa))
> +  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_a), result_aa))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_a, mask_b), result_ab))
> +  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_b), result_ab))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_b, mask_a),result_ba))
> +  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_a),result_ba))
>      abort ();
> -  if (!vec_all_eq (do_vec_ctzm (source_b, mask_b), result_bb))
> +  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_b), result_bb))
>      abort ();
>
>    return 0;
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
> index a95c29cf31d..f18bb16ffb2 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
> @@ -5,10 +5,8 @@
>
>  extern void abort (void);
>
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
>  unsigned long long int
> -do_vec_gnb (vector unsigned char source, int stride)
> +do_vec_gnb (vector unsigned __int128 source, int stride)
>  {
>    switch (stride)
>      {
> @@ -46,15 +44,15 @@ main (int argc, char *argv [])
>
>    /* The last array element appears in the left-most (first) bit
>       positions of the vector register.  */
> -  vector unsigned char source_a = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_b = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> -  vector unsigned char source_c = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_d = {
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> +  vector unsigned __int128 source_a =
> +    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
> +  vector unsigned __int128 source_b =
> +    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
> +  vector unsigned __int128 source_c =
> +    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
> +  vector unsigned __int128 source_d =
> +    { 0x8080808080808080ull |
> +      ((unsigned __int128) 0x8080808080808080ull) << 64 };
>
>    unsigned long long int results [] =
>      { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
> index e8ceed55994..ee9c44f88b2 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
> @@ -6,10 +6,8 @@
>
>  extern void abort (void);
>
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
>  unsigned long long int
> -do_vec_gnb (vector unsigned char source, int stride)
> +do_vec_gnb (vector unsigned __int128 source, int stride)
>  {
>    switch (stride)
>      {
> @@ -47,15 +45,15 @@ main (int argc, char *argv [])
>
>    /* The last array element appears in the left-most (first) bit
>       positions of the vector register.  */
> -  vector unsigned char source_a = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_b = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> -  vector unsigned char source_c = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_d = {
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> +  vector unsigned __int128 source_a =
> +    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
> +  vector unsigned __int128 source_b =
> +    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
> +  vector unsigned __int128 source_c =
> +    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
> +  vector unsigned __int128 source_d =
> +    { 0x8080808080808080ull |
> +      ((unsigned __int128) 0x8080808080808080ull) << 64 };
>
>    unsigned long long int results [] =
>      { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> @@ -72,4 +70,3 @@ main (int argc, char *argv [])
>
>    return 0;
>  }
> -
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
> deleted file mode 100644
> index 73ff0d9fea7..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -unsigned long long int
> -do_vec_gnb (vector unsigned char source, unsigned char stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 0);      /* { dg-error "between 2 and 7" } */
> -    case 3:
> -      return vec_gnb (source, -1);     /* { dg-error "between 2 and 7" } */
> -    case 4:
> -      return vec_gnb (source, 8);      /* { dg-error "between 2 and 7" } */
> -    case 5:
> -      return vec_gnb (source, 1);      /* { dg-error "between 2 and 7" } */
> -    case 6:
> -      return vec_gnb (source, stride); /* { dg-error "unsigned literal" } */
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned char source_a = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_b = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> -  vector unsigned char source_c = {
> -    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
> -  vector unsigned char source_d = {
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
> -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
> index eb51a8db219..591f701e820 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
> @@ -5,23 +5,21 @@
>
>  extern void abort (void);
>
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
>  unsigned long long int
> -do_vec_gnb (vector unsigned short int source, int stride)
> +do_vec_gnb (vector unsigned __int128 source, int stride)
>  {
>    switch (stride)
>      {
>      case 2:
> -      return vec_gnb (source, 2);
> +      return vec_gnb (source, 0);      /* { dg-error "between 2 and 7" } */
>      case 3:
> -      return vec_gnb (source, 3);
> +      return vec_gnb (source, -1);     /* { dg-error "between 2 and 7" } */
>      case 4:
> -      return vec_gnb (source, 4);
> +      return vec_gnb (source, 8);      /* { dg-error "between 2 and 7" } */
>      case 5:
> -      return vec_gnb (source, 5);
> +      return vec_gnb (source, 1);      /* { dg-error "between 2 and 7" } */
>      case 6:
> -      return vec_gnb (source, 6);
> +      return vec_gnb (source, stride); /* { dg-error "unsigned literal" } */
>      case 7:
>        return vec_gnb (source, 7);
>
> @@ -46,13 +44,15 @@ main (int argc, char *argv [])
>
>    /* The last array element appears in the left-most (first) bit
>       positions of the vector register.  */
> -  vector unsigned short int source_a = { 0, 0, 0, 0, 0, 0, 0x8888, 0x8888 };
> -  vector unsigned short int source_b = {
> -    0, 0, 0, 0, 0x8080, 0x8080, 0x8080, 0x8080 };
> -  vector unsigned short int source_c = {
> -    0, 0, 0, 0, 0x8888, 0x8888, 0x8888, 0x8888 };
> -  vector unsigned short int source_d = {
> -    0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080 };
> +  vector unsigned __int128 source_a =
> +    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
> +  vector unsigned __int128 source_b =
> +    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
> +  vector unsigned __int128 source_c =
> +    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
> +  vector unsigned __int128 source_d =
> +    { 0x8080808080808080ull |
> +      ((unsigned __int128) 0x8080808080808080ull) << 64 };
>
>    unsigned long long int results [] =
>      { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> @@ -70,4 +70,3 @@ main (int argc, char *argv [])
>    return 0;
>  }
>
> -/* { dg-final { scan-assembler {\mvgnb\M} } } */
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
> deleted file mode 100644
> index f36b91a83e5..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -/* { dg-do run } */
> -/* { dg-require-effective-target powerpc_future_hw } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned short int source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned short int source_a = { 0, 0, 0, 0, 0, 0, 0x8888, 0x8888 };
> -  vector unsigned short int source_b = {
> -    0, 0, 0, 0, 0x8080, 0x8080, 0x8080, 0x8080 };
> -  vector unsigned short int source_c = {
> -    0, 0, 0, 0, 0x8888, 0x8888, 0x8888, 0x8888 };
> -  vector unsigned short int source_d = {
> -    0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
> deleted file mode 100644
> index df312ae1b28..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
> +++ /dev/null
> @@ -1,71 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned int source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned int source_a = { 0, 0, 0, 0x88888888 };
> -  vector unsigned int source_b = { 0, 0, 0x80808080, 0x80808080 };
> -  vector unsigned int source_c = { 0, 0, 0x88888888, 0x88888888 };
> -  vector unsigned int source_d =
> -    { 0x80808080, 0x80808080, 0x80808080, 0x80808080 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> -/* { dg-final { scan-assembler {\mvgnb\M} } } */
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
> deleted file mode 100644
> index 1c3c3fa72c0..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
> +++ /dev/null
> @@ -1,71 +0,0 @@
> -/* { dg-do run } */
> -/* { dg-require-effective-target powerpc_future_hw } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned int source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned int source_a = { 0, 0, 0, 0x88888888 };
> -  vector unsigned int source_b = { 0, 0, 0x80808080, 0x80808080 };
> -  vector unsigned int source_c = { 0, 0, 0x88888888, 0x88888888 };
> -  vector unsigned int source_d =
> -    { 0x80808080, 0x80808080, 0x80808080, 0x80808080 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
> deleted file mode 100644
> index a6dc78a3e98..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
> +++ /dev/null
> @@ -1,71 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned long long int source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned long long int source_a = { 0, 0x8888888800000000ull };
> -  vector unsigned long long int source_b = { 0, 0x8080808080808080ull };
> -  vector unsigned long long int source_c = { 0, 0x8888888888888888ull };
> -  vector unsigned long long int source_d = { 0x8080808080808080ull,
> -                                            0x8080808080808080ull };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> -/* { dg-final { scan-assembler {\mvgnb\M} } } */
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
> deleted file mode 100644
> index bbacff986a0..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
> +++ /dev/null
> @@ -1,71 +0,0 @@
> -/* { dg-do run } */
> -/* { dg-require-effective-target powerpc_future_hw } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned long long int source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned long long int source_a = { 0, 0x8888888800000000ull };
> -  vector unsigned long long int source_b = { 0, 0x8080808080808080ull };
> -  vector unsigned long long int source_c = { 0, 0x8888888888888888ull };
> -  vector unsigned long long int source_d = { 0x8080808080808080ull,
> -                                            0x8080808080808080ull };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
> deleted file mode 100644
> index 23c16e51d48..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
> +++ /dev/null
> @@ -1,75 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned __int128 source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned __int128 source_a =
> -    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
> -  vector unsigned __int128 source_b =
> -    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
> -  vector unsigned __int128 source_c =
> -    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
> -  vector unsigned __int128 source_d =
> -    { 0x8080808080808080ull |
> -      ((unsigned __int128) 0x8080808080808080ull) << 64 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> -
> -/* { dg-final { scan-assembler {\mvgnb\M} } } */
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c
> deleted file mode 100644
> index 659e802d819..00000000000
> --- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -/* { dg-do run } */
> -/* { dg-require-effective-target powerpc_future_hw } */
> -/* { dg-options "-mdejagnu-cpu=future" } */
> -
> -#include <altivec.h>
> -
> -extern void abort (void);
> -
> -/* This test is replicated for every different vector type since
> -   vec_gnb is polymorphic.  */
> -unsigned long long int
> -do_vec_gnb (vector unsigned __int128 source, int stride)
> -{
> -  switch (stride)
> -    {
> -    case 2:
> -      return vec_gnb (source, 2);
> -    case 3:
> -      return vec_gnb (source, 3);
> -    case 4:
> -      return vec_gnb (source, 4);
> -    case 5:
> -      return vec_gnb (source, 5);
> -    case 6:
> -      return vec_gnb (source, 6);
> -    case 7:
> -      return vec_gnb (source, 7);
> -
> -    default:
> -      /* Illegal value of stride */
> -      abort ();
> -      return 0;
> -    }
> -}
> -
> -int
> -main (int argc, char *argv [])
> -{
> -  /* For result = 0xaaaa_0000_0000_0000, use:
> -      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
> -      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
> -
> -     For result = 0xaaaa_aaaa_0000_0000, use:
> -      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
> -      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
> -  */
> -
> -  /* The last array element appears in the left-most (first) bit
> -     positions of the vector register.  */
> -  vector unsigned __int128 source_a =
> -    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
> -  vector unsigned __int128 source_b =
> -    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
> -  vector unsigned __int128 source_c =
> -    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
> -  vector unsigned __int128 source_d =
> -    { 0x8080808080808080ull |
> -      ((unsigned __int128) 0x8080808080808080ull) << 64 };
> -
> -  unsigned long long int results [] =
> -    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
> -      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
> -
> -  if (do_vec_gnb (source_a, 2) != results [0])
> -    abort ();
> -  if (do_vec_gnb (source_b, 4) != results [1])
> -    abort ();
> -  if (do_vec_gnb (source_c, 2) != results [2])
> -    abort ();
> -  if (do_vec_gnb (source_d, 4) != results [3])
> -    abort ();
> -
> -  return 0;
> -}
> --
> 2.17.1
>
Segher Boessenkool May 11, 2020, 12:16 p.m. UTC | #2
Hi!

On Sat, May 09, 2020 at 08:08:34PM -0500, Bill Schmidt wrote:
> I should have noticed this patch before submitting Kelvin's earlier
> related patches, sorry.  I think it should still be fine to apply
> the patches in order, but if you'd like me to combine this into the
> two earlier ones, I'd be happy to do that.

The intermediary step works just fine as well, so it is fine as-is.

One thing:

> 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
> 	Change fourth operand for vec_ternarylogic to require
> 	compatibility with unsigned SImode rather than unsigned QImode.

Is it still checked for range 0..255 though?  (If the compiler can
derive that).

In either case, if that is what the ABI says, that is what the ABI says,
so okay for trunk.

Thanks!


Segher
Li, Pan2 via Gcc-patches May 12, 2020, 2:31 a.m. UTC | #3
On 5/11/20 7:16 AM, Segher Boessenkool wrote:
> Hi!
>
> On Sat, May 09, 2020 at 08:08:34PM -0500, Bill Schmidt wrote:
>> I should have noticed this patch before submitting Kelvin's earlier
>> related patches, sorry.  I think it should still be fine to apply
>> the patches in order, but if you'd like me to combine this into the
>> two earlier ones, I'd be happy to do that.
> The intermediary step works just fine as well, so it is fine as-is.
>
> One thing:
>
>> 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
>> 	Change fourth operand for vec_ternarylogic to require
>> 	compatibility with unsigned SImode rather than unsigned QImode.
> Is it still checked for range 0..255 though?  (If the compiler can
> derive that).


Yep, we already have this:

   if (icode == CODE_FOR_xxeval)
     {
       /* Only allow 8-bit unsigned literals.  */
       STRIP_NOPS (arg3);
       if (TREE_CODE (arg3) != INTEGER_CST
           || TREE_INT_CST_LOW (arg3) & ~0xff)
         {
           error ("argument 4 must be an 8-bit unsigned literal");
           return CONST0_RTX (tmode);
         }
     }

Thanks for the review!
Bill

>
> In either case, if that is what the ABI says, that is what the ABI says,
> so okay for trunk.
>
> Thanks!
>
>
> Segher
Segher Boessenkool May 12, 2020, 5:25 a.m. UTC | #4
On Mon, May 11, 2020 at 09:31:41PM -0500, Bill Schmidt wrote:
> On 5/11/20 7:16 AM, Segher Boessenkool wrote:
> >>	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
> >>	Change fourth operand for vec_ternarylogic to require
> >>	compatibility with unsigned SImode rather than unsigned QImode.
> >Is it still checked for range 0..255 though?  (If the compiler can
> >derive that).
> 
> Yep, we already have this:
> 
>   if (icode == CODE_FOR_xxeval)
>     {
>       /* Only allow 8-bit unsigned literals.  */
>       STRIP_NOPS (arg3);
>       if (TREE_CODE (arg3) != INTEGER_CST
>           || TREE_INT_CST_LOW (arg3) & ~0xff)
>         {
>           error ("argument 4 must be an 8-bit unsigned literal");
>           return CONST0_RTX (tmode);
>         }
>     }

That test only makes sure that bits 0x00000000ffffff00 are zero -- which
does work correctly here because we do know the operand is SImode.
Tricky.


Segher
diff mbox series

Patch

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 3729ceaf336..85c5626877d 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -689,8 +689,8 @@  __altivec_scalar_pred(vec_any_nle,
 #ifdef _ARCH_PWR_FUTURE
 /* May modify these macro definitions if future capabilities overload
    with support for different vector argument and result types.  */
-#define vec_clzm(a, b)	__builtin_altivec_vclzdm (a, b)
-#define vec_ctzm(a, b)	__builtin_altivec_vctzdm (a, b)
+#define vec_cntlzm(a, b)	__builtin_altivec_vclzdm (a, b)
+#define vec_cnttzm(a, b)	__builtin_altivec_vctzdm (a, b)
 #define vec_pdep(a, b)	__builtin_altivec_vpdepd (a, b)
 #define vec_pext(a, b)	__builtin_altivec_vpextd (a, b)
 #define vec_cfuge(a, b)	__builtin_altivec_vcfuged (a, b)
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index cacaea00bd4..07ca33a89b4 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -1813,7 +1813,7 @@  altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
 		&& rs6000_builtin_type_compatible (types[1], desc->op2)
 		&& rs6000_builtin_type_compatible (types[2], desc->op3)
 		&& rs6000_builtin_type_compatible (types[3],
-						   RS6000_BTI_UINTQI))
+						   RS6000_BTI_UINTSI))
 	      {
 		if (rs6000_builtin_decls[desc->overloaded_code] == NULL_TREE)
 		  unsupported_builtin = true;
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 0b9ed7ef018..d6fa1a86c04 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -5522,14 +5522,6 @@  const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
     RS6000_BTI_UINTSI, 0 },
 
-  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
-    RS6000_BTI_unsigned_V16QI, RS6000_BTI_UINTQI, 0 },
-  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
-    RS6000_BTI_unsigned_V8HI, RS6000_BTI_UINTQI, 0 },
-  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
-    RS6000_BTI_unsigned_V4SI, RS6000_BTI_UINTQI, 0 },
-  { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
-    RS6000_BTI_unsigned_V2DI, RS6000_BTI_UINTQI, 0 },
   { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
     RS6000_BTI_unsigned_V1TI, RS6000_BTI_UINTQI, 0 },
   { FUTURE_BUILTIN_VEC_XXGENPCVM, FUTURE_BUILTIN_XXGENPCVM_V2DI,
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index c352c512285..4c5ed3f3bac 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -20762,19 +20762,19 @@  Perform a vector centrifuge operation, as if implemented by the Future
 
 @smallexample
 @exdent vector unsigned long long int
-@exdent vec_clzm (vector unsigned long long int, vector unsigned long long int)
+@exdent vec_cntlzm (vector unsigned long long int, vector unsigned long long int)
 @end smallexample
 Perform a vector count leading zeros under bit mask operation, as if
 implemented by the Future @code{vclzdm} instruction.
-@findex vec_clzm
+@findex vec_cntlzm
 
 @smallexample
 @exdent vector unsigned long long int
-@exdent vec_ctzm (vector unsigned long long int, vector unsigned long long int)
+@exdent vec_cnttzm (vector unsigned long long int, vector unsigned long long int)
 @end smallexample
 Perform a vector count trailing zeros under bit mask operation, as if
 implemented by the Future @code{vctzdm} instruction.
-@findex vec_ctzm
+@findex vec_cnttzm
 
 @smallexample
 @exdent vector signed char
@@ -20802,14 +20802,6 @@  value of @code{n} that is greater than 16 is treated as if it equaled 16.
 
 @smallexample
 @exdent vector unsigned long long int
-@exdent vec_gnb (vector unsigned char, const unsigned char)
-@exdent vector unsigned long long int
-@exdent vec_gnb (vector unsigned short, const unsigned char)
-@exdent vector unsigned long long int
-@exdent vec_gnb (vector unsigned int, const unsigned char)
-@exdent vector unsigned long long int
-@exdent vec_gnb (vector unsigned long long int, const unsigned char)
-@exdent vector unsigned long long int
 @exdent vec_gnb (vector unsigned __int128, const unsigned char)
 @end smallexample
 Perform a 128-bit vector gather  operation, as if implemented by the Future
@@ -20889,6 +20881,28 @@  little-endian targets.  Choose this built-in to check for presence of
 zero element if the same argument is also passed to @code{vec_strir}.
 @findex vec_strir_p
 
+@smallexample
+@exdent vector unsigned char
+@exdent vec_ternarylogic (vector unsigned char, vector unsigned char,
+            vector unsigned char, const unsigned int)
+@exdent vector unsigned short
+@exdent vec_ternarylogic (vector unsigned short, vector unsigned short,
+            vector unsigned short, const unsigned int)
+@exdent vector unsigned int
+@exdent vec_ternarylogic (vector unsigned int, vector unsigned int,
+            vector unsigned int, const unsigned int)
+@exdent vector unsigned long long int
+@exdent vec_ternarylogic (vector unsigned long long int, vector unsigned long long int,
+            vector unsigned long long int, const unsigned int)
+@exdent vector unsigned __int128
+@exdent vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
+            vector unsigned __int128, const unsigned int)
+@end smallexample
+Perform a 128-bit vector evaluate operation, as if implemented by the
+Future @code{xxeval} instruction.  The fourth argument must be a literal
+integer value between 0 and 255 inclusive.
+@findex vec_ternarylogic
+
 @smallexample
 @exdent vector unsigned char vec_genpcvm (vector unsigned char, const int)
 @exdent vector unsigned short vec_genpcvm (vector unsigned short, const int)
@@ -22123,28 +22137,6 @@  else
 @end smallexample
 @end deftypefn
 
-@smallexample
-@exdent vector unsigned char
-@exdent vec_ternarylogic (vector unsigned char, vector unsigned char,
-            vector unsigned char, const unsigned char)
-@exdent vector unsigned short
-@exdent vec_ternarylogic (vector unsigned short, vector unsigned short,
-            vector unsigned short, const unsigned char)
-@exdent vector unsigned int
-@exdent vec_ternarylogic (vector unsigned int, vector unsigned int,
-            vector unsigned int, const unsigned char)
-@exdent vector unsigned long long int
-@exdent vec_ternarylogic (vector unsigned long long int, vector unsigned long long int,
-            vector unsigned long long int, const unsigned char)
-@exdent vector unsigned __int128
-@exdent vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
-            vector unsigned __int128, const unsigned char)
-@end smallexample
-Perform a 128-bit vector evaluate operation, as if implemented by the
-Future @code{xxeval} instruction.  The fourth argument must be a literal
-integer value between 0 and 255 inclusive.
-@findex vec_ternarylogic
-
 The following built-in functions are made available by @option{-mmmx}.
 All of them generate the machine instruction that is part of the name.
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
similarity index 79%
rename from gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c
rename to gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
index 099c5dc99bf..6fe0cbd8875 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-clzm-0.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-0.c
@@ -6,10 +6,10 @@ 
 extern void abort (void);
 
 vector unsigned long long int
-do_vec_clzm (vector unsigned long long int source,
+do_vec_cntlzm (vector unsigned long long int source,
 	     vector unsigned long long int mask)
 {
-  return vec_clzm (source, mask);
+  return vec_cntlzm (source, mask);
 }
 
 int main (int argc, char *argv [])
@@ -39,13 +39,13 @@  int main (int argc, char *argv [])
   vector unsigned long long int result_ba = { 2, 0 };
   vector unsigned long long int result_bb = { 0, 1 };
 
-  if (!vec_all_eq (do_vec_clzm (source_a, mask_a), result_aa))
+  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_a), result_aa))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_a, mask_b), result_ab))
+  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_b), result_ab))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_b, mask_a), result_ba))
+  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_a), result_ba))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_b, mask_b), result_bb))
+  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_b), result_bb))
     abort ();
 
   return 0;
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
similarity index 79%
rename from gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c
rename to gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
index 43b86114487..7e058ed8843 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-clzm-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-cntlzm-1.c
@@ -7,10 +7,10 @@ 
 extern void abort (void);
 
 vector unsigned long long int
-do_vec_clzm (vector unsigned long long int source,
+do_vec_cntlzm (vector unsigned long long int source,
 	     vector unsigned long long int mask)
 {
-  return vec_clzm (source, mask);
+  return vec_cntlzm (source, mask);
 }
 
 int main (int argc, char *argv [])
@@ -40,13 +40,13 @@  int main (int argc, char *argv [])
   vector unsigned long long int result_ba = { 2, 0 };
   vector unsigned long long int result_bb = { 0, 1 };
 
-  if (!vec_all_eq (do_vec_clzm (source_a, mask_a), result_aa))
+  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_a), result_aa))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_a, mask_b), result_ab))
+  if (!vec_all_eq (do_vec_cntlzm (source_a, mask_b), result_ab))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_b, mask_a), result_ba))
+  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_a), result_ba))
     abort ();
-  if (!vec_all_eq (do_vec_clzm (source_b, mask_b), result_bb))
+  if (!vec_all_eq (do_vec_cntlzm (source_b, mask_b), result_bb))
     abort ();
 
   return 0;
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
similarity index 79%
rename from gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c
rename to gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
index 315edf4d4cd..94fac3bf817 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-0.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-0.c
@@ -6,10 +6,10 @@ 
 extern void abort (void);
 
 vector unsigned long long int
-do_vec_ctzm (vector unsigned long long int source,
+do_vec_cnttzm (vector unsigned long long int source,
 	     vector unsigned long long int mask)
 {
-  return vec_ctzm (source, mask);
+  return vec_cnttzm (source, mask);
 }
 
 int main (int argc, char *argv [])
@@ -39,13 +39,13 @@  int main (int argc, char *argv [])
   vector unsigned long long int result_ba = { 0, 0 };
   vector unsigned long long int result_bb = { 1, 2 };
 
-  if (!vec_all_eq (do_vec_ctzm (source_a, mask_a), result_aa))
+  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_a), result_aa))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_a, mask_b), result_ab))
+  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_b), result_ab))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_b, mask_a),result_ba))
+  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_a),result_ba))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_b, mask_b), result_bb))
+  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_b), result_bb))
     abort ();
 
   return 0;
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
similarity index 79%
rename from gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c
rename to gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
index 3dc4a03ab09..27ff3bd4961 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-ctzm-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-cnttzm-1.c
@@ -7,10 +7,10 @@ 
 extern void abort (void);
 
 vector unsigned long long int
-do_vec_ctzm (vector unsigned long long int source,
+do_vec_cnttzm (vector unsigned long long int source,
 	     vector unsigned long long int mask)
 {
-  return vec_ctzm (source, mask);
+  return vec_cnttzm (source, mask);
 }
 
 int main (int argc, char *argv [])
@@ -40,13 +40,13 @@  int main (int argc, char *argv [])
   vector unsigned long long int result_ba = { 0, 0 };
   vector unsigned long long int result_bb = { 1, 2 };
 
-  if (!vec_all_eq (do_vec_ctzm (source_a, mask_a), result_aa))
+  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_a), result_aa))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_a, mask_b), result_ab))
+  if (!vec_all_eq (do_vec_cnttzm (source_a, mask_b), result_ab))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_b, mask_a),result_ba))
+  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_a),result_ba))
     abort ();
-  if (!vec_all_eq (do_vec_ctzm (source_b, mask_b), result_bb))
+  if (!vec_all_eq (do_vec_cnttzm (source_b, mask_b), result_bb))
     abort ();
 
   return 0;
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
index a95c29cf31d..f18bb16ffb2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
@@ -5,10 +5,8 @@ 
 
 extern void abort (void);
 
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
 unsigned long long int
-do_vec_gnb (vector unsigned char source, int stride)
+do_vec_gnb (vector unsigned __int128 source, int stride)
 {
   switch (stride)
     {
@@ -46,15 +44,15 @@  main (int argc, char *argv [])
 
   /* The last array element appears in the left-most (first) bit
      positions of the vector register.  */
-  vector unsigned char source_a = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_b = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
-  vector unsigned char source_c = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_d = {
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
+  vector unsigned __int128 source_a =
+    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
+  vector unsigned __int128 source_b =
+    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
+  vector unsigned __int128 source_c =
+    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
+  vector unsigned __int128 source_d =
+    { 0x8080808080808080ull |
+      ((unsigned __int128) 0x8080808080808080ull) << 64 };
 
   unsigned long long int results [] =
     { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
index e8ceed55994..ee9c44f88b2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
@@ -6,10 +6,8 @@ 
 
 extern void abort (void);
 
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
 unsigned long long int
-do_vec_gnb (vector unsigned char source, int stride)
+do_vec_gnb (vector unsigned __int128 source, int stride)
 {
   switch (stride)
     {
@@ -47,15 +45,15 @@  main (int argc, char *argv [])
 
   /* The last array element appears in the left-most (first) bit
      positions of the vector register.  */
-  vector unsigned char source_a = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_b = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
-  vector unsigned char source_c = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_d = {
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
+  vector unsigned __int128 source_a =
+    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
+  vector unsigned __int128 source_b =
+    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
+  vector unsigned __int128 source_c =
+    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
+  vector unsigned __int128 source_d =
+    { 0x8080808080808080ull |
+      ((unsigned __int128) 0x8080808080808080ull) << 64 };
 
   unsigned long long int results [] =
     { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
@@ -72,4 +70,3 @@  main (int argc, char *argv [])
 
   return 0;
 }
-
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
deleted file mode 100644
index 73ff0d9fea7..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-10.c
+++ /dev/null
@@ -1,72 +0,0 @@ 
-/* { dg-do compile } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-unsigned long long int
-do_vec_gnb (vector unsigned char source, unsigned char stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 0);	/* { dg-error "between 2 and 7" } */
-    case 3:
-      return vec_gnb (source, -1);	/* { dg-error "between 2 and 7" } */
-    case 4:
-      return vec_gnb (source, 8);	/* { dg-error "between 2 and 7" } */
-    case 5:
-      return vec_gnb (source, 1);	/* { dg-error "between 2 and 7" } */
-    case 6:
-      return vec_gnb (source, stride);	/* { dg-error "unsigned literal" } */
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned char source_a = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_b = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
-  vector unsigned char source_c = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
-  vector unsigned char source_d = {
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
index eb51a8db219..591f701e820 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
@@ -5,23 +5,21 @@ 
 
 extern void abort (void);
 
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
 unsigned long long int
-do_vec_gnb (vector unsigned short int source, int stride)
+do_vec_gnb (vector unsigned __int128 source, int stride)
 {
   switch (stride)
     {
     case 2:
-      return vec_gnb (source, 2);
+      return vec_gnb (source, 0);	/* { dg-error "between 2 and 7" } */
     case 3:
-      return vec_gnb (source, 3);
+      return vec_gnb (source, -1);	/* { dg-error "between 2 and 7" } */
     case 4:
-      return vec_gnb (source, 4);
+      return vec_gnb (source, 8);	/* { dg-error "between 2 and 7" } */
     case 5:
-      return vec_gnb (source, 5);
+      return vec_gnb (source, 1);	/* { dg-error "between 2 and 7" } */
     case 6:
-      return vec_gnb (source, 6);
+      return vec_gnb (source, stride);	/* { dg-error "unsigned literal" } */
     case 7:
       return vec_gnb (source, 7);
 
@@ -46,13 +44,15 @@  main (int argc, char *argv [])
 
   /* The last array element appears in the left-most (first) bit
      positions of the vector register.  */
-  vector unsigned short int source_a = { 0, 0, 0, 0, 0, 0, 0x8888, 0x8888 };
-  vector unsigned short int source_b = {
-    0, 0, 0, 0, 0x8080, 0x8080, 0x8080, 0x8080 };
-  vector unsigned short int source_c = {
-    0, 0, 0, 0, 0x8888, 0x8888, 0x8888, 0x8888 };
-  vector unsigned short int source_d = {
-    0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080 };
+  vector unsigned __int128 source_a =
+    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
+  vector unsigned __int128 source_b =
+    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
+  vector unsigned __int128 source_c =
+    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
+  vector unsigned __int128 source_d =
+    { 0x8080808080808080ull |
+      ((unsigned __int128) 0x8080808080808080ull) << 64 };
 
   unsigned long long int results [] =
     { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
@@ -70,4 +70,3 @@  main (int argc, char *argv [])
   return 0;
 }
 
-/* { dg-final { scan-assembler {\mvgnb\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
deleted file mode 100644
index f36b91a83e5..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-3.c
+++ /dev/null
@@ -1,72 +0,0 @@ 
-/* { dg-do run } */
-/* { dg-require-effective-target powerpc_future_hw } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned short int source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned short int source_a = { 0, 0, 0, 0, 0, 0, 0x8888, 0x8888 };
-  vector unsigned short int source_b = {
-    0, 0, 0, 0, 0x8080, 0x8080, 0x8080, 0x8080 };
-  vector unsigned short int source_c = {
-    0, 0, 0, 0, 0x8888, 0x8888, 0x8888, 0x8888 };
-  vector unsigned short int source_d = {
-    0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
deleted file mode 100644
index df312ae1b28..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-4.c
+++ /dev/null
@@ -1,71 +0,0 @@ 
-/* { dg-do compile } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned int source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned int source_a = { 0, 0, 0, 0x88888888 };
-  vector unsigned int source_b = { 0, 0, 0x80808080, 0x80808080 };
-  vector unsigned int source_c = { 0, 0, 0x88888888, 0x88888888 };
-  vector unsigned int source_d =
-    { 0x80808080, 0x80808080, 0x80808080, 0x80808080 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
-/* { dg-final { scan-assembler {\mvgnb\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
deleted file mode 100644
index 1c3c3fa72c0..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-5.c
+++ /dev/null
@@ -1,71 +0,0 @@ 
-/* { dg-do run } */
-/* { dg-require-effective-target powerpc_future_hw } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned int source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned int source_a = { 0, 0, 0, 0x88888888 };
-  vector unsigned int source_b = { 0, 0, 0x80808080, 0x80808080 };
-  vector unsigned int source_c = { 0, 0, 0x88888888, 0x88888888 };
-  vector unsigned int source_d =
-    { 0x80808080, 0x80808080, 0x80808080, 0x80808080 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
deleted file mode 100644
index a6dc78a3e98..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-6.c
+++ /dev/null
@@ -1,71 +0,0 @@ 
-/* { dg-do compile } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned long long int source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned long long int source_a = { 0, 0x8888888800000000ull };
-  vector unsigned long long int source_b = { 0, 0x8080808080808080ull };
-  vector unsigned long long int source_c = { 0, 0x8888888888888888ull };
-  vector unsigned long long int source_d = { 0x8080808080808080ull,
-					     0x8080808080808080ull };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
-/* { dg-final { scan-assembler {\mvgnb\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
deleted file mode 100644
index bbacff986a0..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-7.c
+++ /dev/null
@@ -1,71 +0,0 @@ 
-/* { dg-do run } */
-/* { dg-require-effective-target powerpc_future_hw } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned long long int source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned long long int source_a = { 0, 0x8888888800000000ull };
-  vector unsigned long long int source_b = { 0, 0x8080808080808080ull };
-  vector unsigned long long int source_c = { 0, 0x8888888888888888ull };
-  vector unsigned long long int source_d = { 0x8080808080808080ull,
-					     0x8080808080808080ull };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
deleted file mode 100644
index 23c16e51d48..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-8.c
+++ /dev/null
@@ -1,75 +0,0 @@ 
-/* { dg-do compile } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned __int128 source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned __int128 source_a =
-    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
-  vector unsigned __int128 source_b =
-    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
-  vector unsigned __int128 source_c =
-    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
-  vector unsigned __int128 source_d =
-    { 0x8080808080808080ull |
-      ((unsigned __int128) 0x8080808080808080ull) << 64 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}
-
-/* { dg-final { scan-assembler {\mvgnb\M} } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c
deleted file mode 100644
index 659e802d819..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-9.c
+++ /dev/null
@@ -1,74 +0,0 @@ 
-/* { dg-do run } */
-/* { dg-require-effective-target powerpc_future_hw } */
-/* { dg-options "-mdejagnu-cpu=future" } */
-
-#include <altivec.h>
-
-extern void abort (void);
-
-/* This test is replicated for every different vector type since
-   vec_gnb is polymorphic.  */
-unsigned long long int
-do_vec_gnb (vector unsigned __int128 source, int stride)
-{
-  switch (stride)
-    {
-    case 2:
-      return vec_gnb (source, 2);
-    case 3:
-      return vec_gnb (source, 3);
-    case 4:
-      return vec_gnb (source, 4);
-    case 5:
-      return vec_gnb (source, 5);
-    case 6:
-      return vec_gnb (source, 6);
-    case 7:
-      return vec_gnb (source, 7);
-
-    default:
-      /* Illegal value of stride */
-      abort ();
-      return 0;
-    }
-}
-
-int
-main (int argc, char *argv [])
-{
-  /* For result = 0xaaaa_0000_0000_0000, use:
-      stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
-      stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
-
-     For result = 0xaaaa_aaaa_0000_0000, use:
-      stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
-      stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
-  */
-
-  /* The last array element appears in the left-most (first) bit
-     positions of the vector register.  */
-  vector unsigned __int128 source_a =
-    { ((unsigned __int128) 0x8888888800000000ull) << 64 };
-  vector unsigned __int128 source_b =
-    { ((unsigned __int128) 0x8080808080808080ull) << 64 };
-  vector unsigned __int128 source_c =
-    { ((unsigned __int128) 0x8888888888888888ull) << 64 };
-  vector unsigned __int128 source_d =
-    { 0x8080808080808080ull |
-      ((unsigned __int128) 0x8080808080808080ull) << 64 };
-
-  unsigned long long int results [] =
-    { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
-      0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
-
-  if (do_vec_gnb (source_a, 2) != results [0])
-    abort ();
-  if (do_vec_gnb (source_b, 4) != results [1])
-    abort ();
-  if (do_vec_gnb (source_c, 2) != results [2])
-    abort ();
-  if (do_vec_gnb (source_d, 4) != results [3])
-    abort ();
-
-  return 0;
-}