public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2020-12-17 22:25 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2020-12-17 22:25 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:9befce7ac191a33c2280d0fa99b24e83d34cbd79

commit 9befce7ac191a33c2280d0fa99b24e83d34cbd79
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Dec 17 16:25:22 2020 -0600

    rs6000: More bug fixes
    
    2020-12-17  Bill Schmidt  <wschmidt@linux.ibm.com>
    
            * config/rs6000/rs6000-builtin-new.def (LVEBX): Fix return type.
            (LVEHX): Likewise.
            (LVEWX): Likeiwse.
            * config/rs6000/rs6000-gen-builtins.c (construct_fntype_id): Don't
            use "ci" for pointers.
            * config/rs6000/rs6000-overload.def (VEC_CMPEQ): Use Altivec
            forms, not VSX forms, for now.
            (VEC_CMPEQ_P): Likewise.
            (VEC_CMPGE): Likewise.
            (VEC_CMPGE_P): Likewise.
            (VEC_CMPGT): Likewise.
            (VEC_CMPGT_P): Likewise.
            (VEC_NMSUB): Likewise.
            (VEC_RE): Likewise.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def |  6 +++---
 gcc/config/rs6000/rs6000-gen-builtins.c  |  5 ++++-
 gcc/config/rs6000/rs6000-overload.def    | 27 +++++++++++++++++++--------
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 3ca7ccab705..8b54b17e1ce 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -306,13 +306,13 @@
   fpmath vf __builtin_altivec_float_sisf (vsi);
     FLOAT_V4SI_V4SF floatv4siv4sf2 {}
 
-  pure vop __builtin_altivec_lvebx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvebx (signed long long, const void *);
     LVEBX altivec_lvebx {ldvec}
 
-  pure vop __builtin_altivec_lvehx (signed long long, const void *);
+  pure vss __builtin_altivec_lvehx (signed long long, const void *);
     LVEHX altivec_lvehx {ldvec}
 
-  pure vop __builtin_altivec_lvewx (signed long long, const void *);
+  pure vsi __builtin_altivec_lvewx (signed long long, const void *);
     LVEWX altivec_lvewx {ldvec}
 
   pure vuc __builtin_altivec_lvsl (signed long long, const void *);
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 57095dde58a..a4495e0c443 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -930,6 +930,7 @@ match_type (typeinfo *typedata, int voidok)
 
        [const] [[signed|unsigned] <basetype> | <vectype>] [*]
 
+       #### Lie below ####
      where "const" applies only to a <basetype> of "int".  Legal values
      of <basetype> are (for now):
 
@@ -1577,7 +1578,9 @@ construct_fntype_id (prototype *protoptr)
 	{
 	  assert (argptr);
 	  buf[bufi++] = '_';
-	  if (argptr->info.isconst && argptr->info.base == BT_INT)
+	  if (argptr->info.isconst
+	      && argptr->info.base == BT_INT
+	      && !argptr->info.ispointer)
 	    {
 	      buf[bufi++] = 'c';
 	      buf[bufi++] = 'i';
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 2109c6ccb56..981e2fe944b 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -456,6 +456,7 @@
     VCMPBFP
 
 [VEC_CMPEQ, vec_cmpeq, __builtin_vec_cmpeq]
+; #### XVCMPEQSP{TARGET_VSX};VCMPEQFP
   vbc __builtin_vec_cmpeq (vsc, vsc);
     VCMPEQUB  VCMPEQUB_VSC
   vbc __builtin_vec_cmpeq (vuc, vuc);
@@ -481,12 +482,13 @@
   vbll __builtin_vec_cmpeq (vbll, vbll);
     VCMPEQUD  VCMPEQUD_VBLL
   vbi __builtin_vec_cmpeq (vf, vf);
-    XVCMPEQSP
+    VCMPEQFP
   vbll __builtin_vec_cmpeq (vd, vd);
     XVCMPEQDP
 
 ; We skip generating a #define because of the C-versus-C++ complexity
 ; in altivec.h.  Look there for the template-y details.
+; #### XVCMPEQSP_P{TARGET_VSX};VCMPEQFP_P
 [VEC_CMPEQ_P, SKIP, __builtin_vec_vcmpeq_p]
   signed int __builtin_vec_vcmpeq_p (signed int, vuc, vuc);
     VCMPEQUB_P  VCMPEQUB_PU
@@ -515,7 +517,7 @@
   signed int __builtin_vec_vcmpeq_p (signed int, vbll, vbll);
     VCMPEQUD_P  VCMPEQUD_PB
   signed int __builtin_vec_vcmpeq_p (signed int, vf, vf);
-    XVCMPEQSP_P
+    VCMPEQFP_P
   signed int __builtin_vec_vcmpeq_p (signed int, vd, vd);
     XVCMPEQDP_P
 
@@ -523,6 +525,7 @@
   signed int __builtin_byte_in_set (unsigned char,  unsigned long long);
     CMPEQB
 
+; #### XVCMPGESP{TARGET_VSX};VCMPGEFP
 [VEC_CMPGE, vec_cmpge, __builtin_vec_cmpge]
   vbc __builtin_vec_cmpge (vsc, vsc);
     CMPGE_16QI  CMPGE_16QI_VSC
@@ -541,7 +544,7 @@
   vbll __builtin_vec_cmpge (vull, vull);
     CMPGE_2DI  CMPGE_2DI_VULL
   vbi __builtin_vec_cmpge (vf, vf);
-    XVCMPGESP
+    VCMPGEFP
   vbll __builtin_vec_cmpge (vd, vd);
     XVCMPGEDP
 
@@ -549,6 +552,7 @@
 ; in altivec.h.  Look there for the template-y details.
 ; See altivec_build_resolved_builtin for how we deal with VEC_CMPGE_P.
 ; It's quite strange and horrible!
+; #### XVCMPGESP_P{TARGET_VSX};VCMPGEFP_P
 [VEC_CMPGE_P, SKIP, __builtin_vec_vcmpge_p]
   signed int __builtin_vec_vcmpge_p (signed int, vuc, vuc);
     VCMPGTUB_P  VCMPGTUB_PR
@@ -567,10 +571,11 @@
   signed int __builtin_vec_vcmpge_p (signed int, vsll, vsll);
     VCMPGTSD_P  VCMPGTSD_PR
   signed int __builtin_vec_vcmpge_p (signed int, vf, vf);
-    XVCMPGESP_P
+    VCMPGEFP_P
   signed int __builtin_vec_vcmpge_p (signed int, vd, vd);
     XVCMPGEDP_P
 
+; #### XVCMPGTSP{TARGET_VSX};VCMPGTFP
 [VEC_CMPGT, vec_cmpgt, __builtin_vec_cmpgt]
   vbc __builtin_vec_cmpgt (vsc, vsc);
     VCMPGTSB
@@ -589,12 +594,13 @@
   vbll __builtin_vec_cmpgt (vull, vull);
     VCMPGTUD
   vbi __builtin_vec_cmpgt (vf, vf);
-    XVCMPGTSP
+    VCMPGTFP
   vbll __builtin_vec_cmpgt (vd, vd);
     XVCMPGTDP
 
 ; We skip generating a #define because of the C-versus-C++ complexity
 ; in altivec.h.  Look there for the template-y details.
+; #### XVCMPGTSP_P{TARGET_VSX};VCMPGTFP_P
 [VEC_CMPGT_P, SKIP, __builtin_vec_vcmpgt_p]
   signed int __builtin_vec_vcmpgt_p (signed int, vuc, vuc);
     VCMPGTUB_P
@@ -613,7 +619,7 @@
   signed int __builtin_vec_vcmpgt_p (signed int, vsll, vsll);
     VCMPGTSD_P
   signed int __builtin_vec_vcmpgt_p (signed int, vf, vf);
-    XVCMPGTSP_P
+    VCMPGTFP_P
   signed int __builtin_vec_vcmpgt_p (signed int, vd, vd);
     XVCMPGTDP_P
 
@@ -2084,9 +2090,10 @@
   vd __builtin_vec_nmadd (vd, vd, vd);
     XVNMADDDP
 
+; #### XVNMSUBDP{TARGET_VSX};VNMSUBFP
 [VEC_NMSUB, vec_nmsub, __builtin_vec_nmsub]
   vf __builtin_vec_nmsub (vf, vf, vf);
-    XVNMSUBSP
+    VNMSUBFP
   vd __builtin_vec_nmsub (vd, vd, vd);
     XVNMSUBDP
 
@@ -2354,9 +2361,13 @@
   vsi __builtin_vec_promote (vsi);
     ABS_V4SI PROMOTE_FAKERY
 
+; Opportunity for improvement: We can use XVRESP instead of VREFP for
+; TARGET_VSX.  We would need conditional dispatch to allow two possibilities.
+; Some syntax like "XVRESP{TARGET_VSX};VREFP".
+; TODO. ####
 [VEC_RE, vec_re, __builtin_vec_re]
   vf __builtin_vec_re (vf);
-    XVRESP
+    VREFP
   vd __builtin_vec_re (vd);
     XVREDP


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-24  3:59 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-24  3:59 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:b8d15e6d2f80a758ea331110e70701adfd8b725c

commit b8d15e6d2f80a758ea331110e70701adfd8b725c
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Tue Feb 23 21:59:11 2021 -0600

    rs6000: More bug fixes
    
    2021-02-23  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def
            (__builtin_vsx_xvcvsxddp_scale): Add constant restriction.
            (__builtin_vsx_xvcvuxddp_scale): Likewise.
            * config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): Call
            rs6000_invalid_new_builtin and expand calls normally.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def | 15 +-----
 gcc/config/rs6000/rs6000-call.c          | 93 +++++++++++++++++++++++++-------
 2 files changed, 75 insertions(+), 33 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 6a29726ec09..2e6616dd290 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1727,7 +1727,7 @@
   const vd __builtin_vsx_xvcvsxddp (vsll);
     XVCVSXDDP vsx_floatv2div2df2 {}
 
-  const vd __builtin_vsx_xvcvsxddp_scale (vsll, const int);
+  const vd __builtin_vsx_xvcvsxddp_scale (vsll, const int<5>);
     XVCVSXDDP_SCALE vsx_xvcvsxddp_scale {}
 
   const vf __builtin_vsx_xvcvsxdsp (vsll);
@@ -1742,7 +1742,7 @@
   const vd __builtin_vsx_xvcvuxddp (vull);
     XVCVUXDDP vsx_floatunsv2div2df2 {}
 
-  const vd __builtin_vsx_xvcvuxddp_scale (vull, const int);
+  const vd __builtin_vsx_xvcvuxddp_scale (vull, const int<5>);
     XVCVUXDDP_SCALE vsx_xvcvuxddp_scale {}
 
 ; Redundant with __builtin_vsx_xvcvuxddp
@@ -3484,17 +3484,6 @@
     PEXTD pextd {}
 
 
-; TODO: Land-mine alert.
-;
-; The original built-in support has code that assumes the internal
-; copy of an MMA built-in function appears immediately after the
-; external copy in the built-in table.  This is fragile.  For the
-; new support, we should transition this to do a name lookup in
-; the built-in hash table, but to start with we will honor the
-; positioning of the built-ins in the table.  Note that right now
-; there is going to be breakage with __builtin_mma_disassemble_{acc,pair}
-; since they each require a blank builtin to follow them with icode
-; CODE_FOR_nothing.
 [mma]
   void __builtin_mma_assemble_acc (v512 *, vuc, vuc, vuc, vuc);
     ASSEMBLE_ACC nothing {mma}
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 18218206e71..25ccbcc26b8 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -15264,82 +15264,135 @@ rs6000_expand_new_builtin (tree exp, rtx target,
     case ENB_P5:
       if (!TARGET_POPCNTB)
 	{
-	  error ("%qs requires at least %qs\n",
-		 bifaddr->bifname, "-mcpu=power5");
+	  rs6000_invalid_new_builtin (fcode);
 	  return expand_call (exp, target, ignore);
 	}
       break;
     case ENB_P6:
       if (!TARGET_CMPB)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_ALTIVEC:
       if (!TARGET_ALTIVEC)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_CELL:
       if (!TARGET_ALTIVEC || rs6000_cpu != PROCESSOR_CELL)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_VSX:
       if (!TARGET_VSX)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P7:
       if (!TARGET_POPCNTD)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P7_64:
       if (!TARGET_POPCNTD || !TARGET_POWERPC64)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P8:
       if (!TARGET_DIRECT_MOVE)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P8V:
       if (!TARGET_P8_VECTOR)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P9:
       if (!TARGET_MODULO)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P9_64:
       if (!TARGET_MODULO || !TARGET_POWERPC64)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P9V:
       if (!TARGET_P9_VECTOR)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_IEEE128_HW:
       if (!TARGET_FLOAT128_HW)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_DFP:
       if (!TARGET_DFP)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_CRYPTO:
       if (!TARGET_CRYPTO)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_HTM:
       if (!TARGET_HTM)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P10:
       if (!TARGET_POWER10)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_P10_64:
       if (!TARGET_POWER10 || !TARGET_POWERPC64)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     case ENB_MMA:
       if (!TARGET_MMA)
-	return const0_rtx;
+	{
+	  rs6000_invalid_new_builtin (fcode);
+	  return expand_call (exp, target, ignore);
+	}
       break;
     };


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-22 20:27 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-22 20:27 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:f201279ba188c30d47c7c7e4b12e0fb831f89f34

commit f201279ba188c30d47c7c7e4b12e0fb831f89f34
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Mon Feb 22 14:20:48 2021 -0600

    rs6000: More bug fixes
    
    2021-02-21  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def (SE_LXVRBX): Fill in icode.
            (SE_LXVRHX): Likewise.
            (SE_LXVRWX): Likewise.
            (SE_LXVRDX): Likewise.
            (TR_STXVRBX): Likewise.
            (TR_STXVRHX): Likewise.
            (TR_STXVRWX): Likewise.
            (TR_STXVRDX): Likewise.
            * config/rs6000/rs6000-call.c (lxvr_expand_builtin): New function.
            (stv_expand_builtin): Add support for truncating stores.
            (rs6000_expand_new_builtin): Handle bif_is_lxvr.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def | 16 +++---
 gcc/config/rs6000/rs6000-call.c          | 83 +++++++++++++++++++++++++++++++-
 2 files changed, 90 insertions(+), 9 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 95dfdf306ab..d325e876308 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -3083,28 +3083,28 @@
     MTVSRWM vec_mtvsr_v4si {}
 
   pure vsq __builtin_altivec_se_lxvrbx (signed long long, const signed char *);
-    SE_LXVRBX nothing {lxvr}
+    SE_LXVRBX vsx_lxvrbx {lxvr}
 
   pure vsq __builtin_altivec_se_lxvrhx (signed long long, const signed short *);
-    SE_LXVRHX nothing {lxvr}
+    SE_LXVRHX vsx_lxvrhx {lxvr}
 
   pure vsq __builtin_altivec_se_lxvrwx (signed long long, const signed int *);
-    SE_LXVRWX nothing {lxvr}
+    SE_LXVRWX vsx_lxvrwx {lxvr}
 
   pure vsq __builtin_altivec_se_lxvrdx (signed long long, const signed long long *);
-    SE_LXVRDX nothing {lxvr}
+    SE_LXVRDX vsx_lxvrdx {lxvr}
 
   void __builtin_altivec_tr_stxvrbx (vsq, signed long long, signed char *);
-    TR_STXVRBX nothing {stvec}
+    TR_STXVRBX vsx_stxvrbx {stvec}
 
   void __builtin_altivec_tr_stxvrhx (vsq, signed long long, signed int *);
-    TR_STXVRHX nothing {stvec}
+    TR_STXVRHX vsx_stxvrhx {stvec}
 
   void __builtin_altivec_tr_stxvrwx (vsq, signed long long, signed short *);
-    TR_STXVRWX nothing {stvec}
+    TR_STXVRWX vsx_stxvrwx {stvec}
 
   void __builtin_altivec_tr_stxvrdx (vsq, signed long long, signed long long *);
-    TR_STXVRDX nothing {stvec}
+    TR_STXVRDX vsx_stxvrdx {stvec}
 
   const vull __builtin_altivec_vcfuged (vull, vull);
     VCFUGED vcfuged {}
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 8907bc96db5..b3265dd2d81 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -13557,11 +13557,70 @@ ldv_expand_builtin (rtx target, insn_code icode, rtx *op, machine_mode tmode)
   return target;
 }
 
+static rtx
+lxvr_expand_builtin (rtx target, insn_code icode, rtx *op, machine_mode tmode,
+		     machine_mode smode)
+{
+  rtx pat, addr;
+  op[1] = copy_to_mode_reg (Pmode, op[1]);
+
+  if (op[0] == const0_rtx)
+    addr = gen_rtx_MEM (tmode, op[1]);
+  else
+    {
+      op[0] = copy_to_mode_reg (tmode, op[0]);
+      addr = gen_rtx_MEM (smode,
+			  gen_rtx_PLUS (Pmode, op[1], op[0]));
+    }
+
+  if (icode == CODE_FOR_vsx_lxvrbx
+      || icode == CODE_FOR_vsx_lxvrhx
+      || icode == CODE_FOR_vsx_lxvrwx
+      || icode == CODE_FOR_vsx_lxvrdx)
+    {
+      rtx discratch = gen_reg_rtx (DImode);
+      rtx tiscratch = gen_reg_rtx (TImode);
+
+      /* Emit the lxvr*x insn.  */
+      pat = GEN_FCN (icode) (tiscratch, addr);
+      if (!pat)
+	return 0;
+      emit_insn (pat);
+
+      /* Emit a sign extension from QI,HI,WI to double (DI).  */
+      rtx scratch = gen_lowpart (smode, tiscratch);
+      if (icode == CODE_FOR_vsx_lxvrbx)
+	emit_insn (gen_extendqidi2 (discratch, scratch));
+      else if (icode == CODE_FOR_vsx_lxvrhx)
+	emit_insn (gen_extendhidi2 (discratch, scratch));
+      else if (icode == CODE_FOR_vsx_lxvrwx)
+	emit_insn (gen_extendsidi2 (discratch, scratch));
+      /*  Assign discratch directly if scratch is already DI.  */
+      if (icode == CODE_FOR_vsx_lxvrdx)
+	discratch = scratch;
+
+      /* Emit the sign extension from DI (double) to TI (quad).  */
+      emit_insn (gen_extendditi2 (target, discratch));
+
+      return target;
+    }
+  else
+    {
+      /* Zero extend.  */
+      pat = GEN_FCN (icode) (target, addr);
+      if (!pat)
+	return 0;
+      emit_insn (pat);
+      return target;
+    }
+  return 0;
+}
+
 static rtx
 stv_expand_builtin (insn_code icode, rtx *op,
 		    machine_mode tmode, machine_mode smode)
 {
-  rtx pat, addr, rawaddr;
+  rtx pat, addr, rawaddr, truncrtx;
   op[2] = copy_to_mode_reg (Pmode, op[2]);
 
   /* For STVX, express the RTL accurately by ANDing the address with -16.
@@ -13587,6 +13646,25 @@ stv_expand_builtin (insn_code icode, rtx *op,
       op[0] = copy_to_mode_reg (tmode, op[0]);
       emit_insn (gen_rtx_SET (addr, op[0]));
     }
+  else if (icode == CODE_FOR_vsx_stxvrbx
+	   || icode == CODE_FOR_vsx_stxvrhx
+	   || icode == CODE_FOR_vsx_stxvrwx
+	   || icode == CODE_FOR_vsx_stxvrdx)
+    {
+      truncrtx = gen_rtx_TRUNCATE (tmode, op[0]);
+      op[0] = copy_to_mode_reg (E_TImode, truncrtx);
+
+      if (op[1] == const0_rtx)
+	addr = gen_rtx_MEM (Pmode, op[2]);
+      else
+	{
+	  op[1] = copy_to_mode_reg (Pmode, op[1]);
+	  addr = gen_rtx_MEM (tmode, gen_rtx_PLUS (Pmode, op[2], op[1]));
+	}
+      pat = GEN_FCN (icode) (addr, op[0]);
+      if (pat)
+	emit_insn (pat);
+    }
   else
     {
       if (! (*insn_data[icode].operand[1].predicate) (op[0], smode))
@@ -15412,6 +15490,9 @@ rs6000_expand_new_builtin (tree exp, rtx target,
       return ldv_expand_builtin (target, icode, op, mode[0]);
     }
 
+  if (bif_is_lxvr (*bifaddr))
+    return lxvr_expand_builtin (target, icode, op, mode[0], mode[1]);
+
   if (bif_is_mma (*bifaddr))
     return new_mma_expand_builtin (exp, target, icode);


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-22 20:27 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-22 20:27 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:787eac10312bd306726e26ac43efd34aab6c5216

commit 787eac10312bd306726e26ac43efd34aab6c5216
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Mon Feb 22 14:17:57 2021 -0600

    rs6000: More bug fixes
    
    2021-02-18  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h (vec_vpopcnt): Remove #define.
            (vec_vpopcntu): New #define.
            * config/rs6000/rs6000-overload.def (VEC_POPCNT): Use
            __builtin_vec_vpopcntu, and make all return values unsigned.
            (VEC_VAVGUB): Use unsigned params and return values.
            (VEC_VAVGUH): Likewise.
            (VEC_VAVGUW): Likewise.
            (VEC_VMAXUD): Likewise.
            (VEC_VMINUD): Likewise.
            (VEC_VPOPCNT): New.
            (VEC_VPOPCNTU): Remove.
            (VEC_VSPLTW): Add vector float support.
    
    gcc/testsuite/
            * gcc.target/powerpc/builtins-3-p9-runnable.c: Revert to master.

Diff:
---
 gcc/config/rs6000/altivec.h                        |  2 +-
 gcc/config/rs6000/rs6000-overload.def              | 74 +++++++++++-----------
 .../gcc.target/powerpc/builtins-3-p9-runnable.c    | 16 ++---
 3 files changed, 47 insertions(+), 45 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 0d31f1897ba..3d68b787a75 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -105,7 +105,7 @@
 #define vec_vgbbd vec_gb
 #define vec_vmrgew vec_mergee
 #define vec_vmrgow vec_mergeo
-#define vec_vpopcnt vec_popcnt
+#define vec_vpopcntu vec_popcnt
 #define vec_vrld vec_rl
 #define vec_vsld vec_sl
 #define vec_vsrd vec_sr
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 11e593e91d4..db881e7bb65 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -2933,22 +2933,22 @@
   vuq __builtin_vec_vpmsum (vull, vull);
     VPMSUMD  VPMSUMD_V
 
-[VEC_POPCNT, vec_popcnt, __builtin_vec_vpopcnt, _ARCH_PWR8]
-  vsc __builtin_vec_vpopcnt (vsc);
+[VEC_POPCNT, vec_popcnt, __builtin_vec_vpopcntu, _ARCH_PWR8]
+  vuc __builtin_vec_vpopcntu (vsc);
     VPOPCNTB
-  vuc __builtin_vec_vpopcnt (vuc);
+  vuc __builtin_vec_vpopcntu (vuc);
     VPOPCNTUB
-  vss __builtin_vec_vpopcnt (vss);
+  vus __builtin_vec_vpopcntu (vss);
     VPOPCNTH
-  vus __builtin_vec_vpopcnt (vus);
+  vus __builtin_vec_vpopcntu (vus);
     VPOPCNTUH
-  vsi __builtin_vec_vpopcnt (vsi);
+  vui __builtin_vec_vpopcntu (vsi);
     VPOPCNTW
-  vui __builtin_vec_vpopcnt (vui);
+  vui __builtin_vec_vpopcntu (vui);
     VPOPCNTUW
-  vsll __builtin_vec_vpopcnt (vsll);
+  vull __builtin_vec_vpopcntu (vsll);
     VPOPCNTD
-  vull __builtin_vec_vpopcnt (vull);
+  vull __builtin_vec_vpopcntu (vull);
     VPOPCNTUD
 
 [VEC_PARITY_LSBB, vec_parity_lsbb, __builtin_vec_vparity_lsbb, _ARCH_PWR9]
@@ -5114,15 +5114,15 @@
     VAVGSW  VAVGSW_DEPR1
 
 [VEC_VAVGUB, vec_vavgub, __builtin_vec_vavgub]
-  vsc __builtin_vec_vavgub (vsc, vsc);
+  vuc __builtin_vec_vavgub (vuc, vuc);
     VAVGUB  VAVGUB_DEPR1
 
 [VEC_VAVGUH, vec_vavguh, __builtin_vec_vavguh]
-  vss __builtin_vec_vavguh (vss, vss);
+  vus __builtin_vec_vavguh (vus, vus);
     VAVGUH  VAVGUH_DEPR1
 
 [VEC_VAVGUW, vec_vavguw, __builtin_vec_vavguw]
-  vsi __builtin_vec_vavguw (vsi, vsi);
+  vui __builtin_vec_vavguw (vui, vui);
     VAVGUW  VAVGUW_DEPR1
 
 [VEC_VBPERMQ, vec_vbpermq, __builtin_vec_vbpermq, _ARCH_PWR8]
@@ -5290,11 +5290,11 @@
     VMAXUB  VMAXUB_DEPR5
 
 [VEC_VMAXUD, vec_vmaxud, __builtin_vec_vmaxud]
-  vsll __builtin_vec_vmaxud (vsll, vsll);
+  vull __builtin_vec_vmaxud (vull, vull);
     VMAXUD  VMAXUD_DEPR1
-  vsll __builtin_vec_vmaxud (vbll, vsll);
+  vull __builtin_vec_vmaxud (vbll, vull);
     VMAXUD  VMAXUD_DEPR2
-  vsll __builtin_vec_vmaxud (vsll, vbll);
+  vull __builtin_vec_vmaxud (vull, vbll);
     VMAXUD  VMAXUD_DEPR3
 
 [VEC_VMAXUH, vec_vmaxuh, __builtin_vec_vmaxuh]
@@ -5370,11 +5370,11 @@
     VMINUB  VMINUB_DEPR5
 
 [VEC_VMINUD, vec_vminud, __builtin_vec_vminud]
-  vsll __builtin_vec_vminud (vsll, vsll);
+  vull __builtin_vec_vminud (vull, vull);
     VMINUD  VMINUD_DEPR1
-  vsll __builtin_vec_vminud (vbll, vsll);
+  vull __builtin_vec_vminud (vbll, vull);
     VMINUD  VMINUD_DEPR2
-  vsll __builtin_vec_vminud (vsll, vbll);
+  vull __builtin_vec_vminud (vull, vbll);
     VMINUD  VMINUD_DEPR3
 
 [VEC_VMINUH, vec_vminuh, __builtin_vec_vminuh]
@@ -5589,6 +5589,24 @@
   vus __builtin_vec_vpkuwus (vui, vui);
     VPKUWUS  VPKUWUS_DEPR1
 
+[VEC_VPOPCNT, vec_vpopcnt, __builtin_vec_vpopcnt, _ARCH_PWR8]
+  vsc __builtin_vec_vpopcnt (vsc);
+    VPOPCNTB  VPOPCNT_DEPR1
+  vuc __builtin_vec_vpopcnt (vuc);
+    VPOPCNTB  VPOPCNT_DEPR2
+  vss __builtin_vec_vpopcnt (vss);
+    VPOPCNTH  VPOPCNT_DEPR3
+  vus __builtin_vec_vpopcnt (vus);
+    VPOPCNTH  VPOPCNT_DEPR4
+  vsi __builtin_vec_vpopcnt (vsi);
+    VPOPCNTW  VPOPCNT_DEPR5
+  vui __builtin_vec_vpopcnt (vui);
+    VPOPCNTW  VPOPCNT_DEPR6
+  vsll __builtin_vec_vpopcnt (vsll);
+    VPOPCNTD  VPOPCNT_DEPR7
+  vull __builtin_vec_vpopcnt (vull);
+    VPOPCNTD  VPOPCNT_DEPR8
+
 [VEC_VPOPCNTB, vec_vpopcntb, __builtin_vec_vpopcntb, _ARCH_PWR8]
   vsc __builtin_vec_vpopcntb (vsc);
     VPOPCNTB  VPOPCNTB_DEPR1
@@ -5607,24 +5625,6 @@
   vus __builtin_vec_vpopcnth (vus);
     VPOPCNTH  VPOPCNTH_DEPR2
 
-[VEC_VPOPCNTU, SKIP, __builtin_vec_vpopcntu, _ARCH_PWR8]
-  vuc __builtin_vec_vpopcntu (vsc);
-    VPOPCNTUB  VPOPCNTU_DEPR1
-  vuc __builtin_vec_vpopcntu (vuc);
-    VPOPCNTUB  VPOPCNTU_DEPR2
-  vus __builtin_vec_vpopcntu (vss);
-    VPOPCNTUH  VPOPCNTU_DEPR3
-  vus __builtin_vec_vpopcntu (vus);
-    VPOPCNTUH  VPOPCNTU_DEPR4
-  vui __builtin_vec_vpopcntu (vsi);
-    VPOPCNTUW  VPOPCNTU_DEPR5
-  vui __builtin_vec_vpopcntu (vui);
-    VPOPCNTUW  VPOPCNTU_DEPR6
-  vull __builtin_vec_vpopcntu (vsll);
-    VPOPCNTUD  VPOPCNTU_DEPR7
-  vull __builtin_vec_vpopcntu (vull);
-    VPOPCNTUD  VPOPCNTU_DEPR8
-
 [VEC_VPOPCNTW, vec_vpopcntw, __builtin_vec_vpopcntw, _ARCH_PWR8]
   vsi __builtin_vec_vpopcntw (vsi);
     VPOPCNTW  VPOPCNTW_DEPR1
@@ -5726,6 +5726,8 @@
     VSPLTW  VSPLTW_DEPR2
   vbi __builtin_vec_vspltw (vbi, const int);
     VSPLTW  VSPLTW_DEPR3
+  vf __builtin_vec_vspltw (vf, const int);
+    VSPLTW  VSPLTW_DEPR4
 
 [VEC_VSRAB, vec_vsrab, __builtin_vec_vsrab]
   vsc __builtin_vec_vsrab (vsc, vuc);
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
index 5f9255861bb..44c0397c49a 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
@@ -44,10 +44,10 @@ int main() {
       test both builtin function names.  */
 
    vfexpt = (vector float){1.0, -2.0, 0.0, 8.5};
-   vfr = vec_extract_fp_from_shorth(vusha);
+   vfr = vec_extract_fp32_from_shorth(vusha);
 
 #ifdef DEBUG
-   printf ("vec_extract_fp_from_shorth\n");
+   printf ("vec_extract_fp32_from_shorth\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);
@@ -59,10 +59,10 @@ int main() {
    }
 
    vfexpt = (vector float){1.5, 0.5, 1.25, -0.25};
-   vfr = vec_extract_fp_from_shortl(vusha);
+   vfr = vec_extract_fp32_from_shortl(vusha);
 
 #ifdef DEBUG
-   printf ("\nvec_extract_fp_from_shortl\n");
+   printf ("\nvec_extract_fp32_from_shortl\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);
@@ -73,10 +73,10 @@ int main() {
          abort();
    }
    vfexpt = (vector float){1.0, -2.0, 0.0, 8.5};
-   vfr = vec_extract_fp32_from_shorth(vusha);
+   vfr = vec_extract_fp_from_shorth(vusha);
 
 #ifdef DEBUG
-   printf ("vec_extract_fp32_from_shorth\n");
+   printf ("vec_extract_fp_from_shorth\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);
@@ -88,10 +88,10 @@ int main() {
    }
 
    vfexpt = (vector float){1.5, 0.5, 1.25, -0.25};
-   vfr = vec_extract_fp32_from_shortl(vusha);
+   vfr = vec_extract_fp_from_shortl(vusha);
 
 #ifdef DEBUG
-   printf ("\nvec_extract_fp32_from_shortl\n");
+   printf ("\nvec_extract_fp_from_shortl\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:8cebc4fb33ff06d1df128512e67e33a61b348109

commit 8cebc4fb33ff06d1df128512e67e33a61b348109
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Sun Feb 7 11:48:07 2021 -0600

    rs6000: More bug fixes
    
    2021-02-07  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Clean up.
            * config/rs6000/rs6000-gen-builtins.c (write_init_file): Remove
            timevar stuff.
            * timevar.def (TV_BILL): Remove.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def | 8 --------
 gcc/config/rs6000/rs6000-gen-builtins.c  | 3 ---
 gcc/timevar.def                          | 3 ---
 3 files changed, 14 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 24fd7ed182d..5e63df13516 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1735,12 +1735,8 @@
   const vd __builtin_vsx_xvcvsxwdp (vsi);
     XVCVSXWDP vsx_xvcvsxwdp {}
 
-; Need to pick one or the other here!!  ####
-; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvsxwsp (vsi);
     XVCVSXWSP vsx_floatv4siv4sf2 {}
-;  const vf __builtin_vsx_xvcvsxwsp (vsi);
-;    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
 
   const vd __builtin_vsx_xvcvuxddp (vull);
     XVCVUXDDP vsx_floatunsv2div2df2 {}
@@ -1758,12 +1754,8 @@
   const vd __builtin_vsx_xvcvuxwdp (vsi);
     XVCVUXWDP vsx_xvcvuxwdp {}
 
-; Need to pick one or the other here!! ####
-; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvuxwsp (vui);
     XVCVUXWSP vsx_floatunsv4siv4sf2 {}
-;  const vf __builtin_vsx_xvcvuxwsp (vui);
-;    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
 
   fpmath vd __builtin_vsx_xvdivdp (vd, vd);
     XVDIVDP divv2df3 {}
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index b75b29303dd..07222228310 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -2691,7 +2691,6 @@ write_init_file ()
   fprintf (init_file, "#include \"tree.h\"\n");
   fprintf (init_file, "#include \"langhooks.h\"\n");
   fprintf (init_file, "#include \"insn-codes.h\"\n");
-  fprintf (init_file, "#include \"timevar.h\"\n");
   fprintf (init_file, "#include \"rs6000-builtins.h\"\n");
   fprintf (init_file, "\n");
 
@@ -2715,7 +2714,6 @@ write_init_file ()
   fprintf (init_file, "rs6000_autoinit_builtins ()\n");
   fprintf (init_file, "{\n");
   fprintf (init_file, "  tree t;\n");
-  fprintf (init_file, "  timevar_start (TV_BILL);\n");
   rbt_inorder_callback (&fntype_rbt, fntype_rbt.rbt_root, write_fntype_init);
   fprintf (init_file, "\n");
 
@@ -2729,7 +2727,6 @@ write_init_file ()
   write_init_bif_table ();
   write_init_ovld_table ();
 
-  fprintf (init_file, "  timevar_stop (TV_BILL);\n");
   fprintf (init_file, "}\n\n");
 
   fprintf (init_file,
diff --git a/gcc/timevar.def b/gcc/timevar.def
index cea0ffa444d..63c0b3306de 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -340,6 +340,3 @@ DEFTIMEVAR (TV_ANALYZER_WORKLIST     , "analyzer: processing worklist")
 DEFTIMEVAR (TV_ANALYZER_DUMP         , "analyzer: dump")
 DEFTIMEVAR (TV_ANALYZER_DIAGNOSTICS  , "analyzer: emitting diagnostics")
 DEFTIMEVAR (TV_ANALYZER_SHORTEST_PATHS, "analyzer: shortest paths")
-
-/* Bill's timevar!  */
-DEFTIMEVAR (TV_BILL, "builtin initialization")


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:48a505844de0403d3f2a5598335ef40baa7bf0df

commit 48a505844de0403d3f2a5598335ef40baa7bf0df
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Sun Jan 31 18:34:34 2021 -0600

    rs6000: More bug fixes
    
    2021-01-31  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Update deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/vec-gnb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-all-nez-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-any-eqz-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cmpnez-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-xst-len-12.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        | 16 +++++++------
 gcc/config/rs6000/rs6000-builtin-new.def           | 26 ++++++++++----------
 gcc/config/rs6000/rs6000-overload.def              | 28 ++++++++++++++--------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c       |  2 +-
 .../gcc.target/powerpc/vsu/vec-all-nez-7.c         |  2 +-
 .../gcc.target/powerpc/vsu/vec-any-eqz-7.c         |  2 +-
 .../gcc.target/powerpc/vsu/vec-cmpnez-7.c          |  2 +-
 .../gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c      |  2 +-
 .../gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c      |  2 +-
 .../gcc.target/powerpc/vsu/vec-xst-len-12.c        |  2 +-
 10 files changed, 47 insertions(+), 37 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index a69e5a398d8..0415e90374d 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -58,18 +58,20 @@
 #include "rs6000-vecdefines.h"
 
 /* Deprecated interfaces.  */
-#define vec_vsld vec_sld
-#define vec_vsrad vec_srad
-#define vec_vsrd vec_srd
+#ifdef _ARCH_PWR8
+#define vec_vsld vec_sl
+#define vec_vsrd vec_sr
+#define vec_vsrad vec_sra
+#endif
 
 #ifdef _ARCH_PWR9
 #define __builtin_vec_vadub __builtin_vec_vadu
 #define __builtin_vec_vaduh __builtin_vec_vadu
 #define __builtin_vec_vaduw __builtin_vec_vadu
-#define __builtin_vec_vprtybw __builtin_vec_vprtyb
-#define __builtin_vec_vprtybd __builtin_vec_vprtyb
-#define __builtin_vec_vprtybq __builtin_vec_vprtyb
-#define vec_vrlnm vec_rlnm
+#define vec_vprtybw vec_vprtyb
+#define vec_vprtybd vec_vprtyb
+#define vec_vprtybq vec_vprtyb
+#define vec_vrlnm __builtin_vec_rlnm
 #endif
 
 /* Synonyms.  */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 84654e872e0..24fd7ed182d 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1647,37 +1647,37 @@
   fpmath vf __builtin_vsx_xvaddsp (vf, vf);
     XVADDSP addv4sf3 {}
 
-  const vbll __builtin_vsx_xvcmpeqdp (vd, vd);
+  const vd __builtin_vsx_xvcmpeqdp (vd, vd);
     XVCMPEQDP vector_eqv2df {}
 
   const signed int __builtin_vsx_xvcmpeqdp_p (signed int, vd, vd);
     XVCMPEQDP_P vector_eq_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpeqsp (vf, vf);
+  const vf __builtin_vsx_xvcmpeqsp (vf, vf);
     XVCMPEQSP vector_eqv4sf {}
 
   const signed int __builtin_vsx_xvcmpeqsp_p (signed int, vf, vf);
     XVCMPEQSP_P vector_eq_v4sf_p {pred}
 
-  const vbll __builtin_vsx_xvcmpgedp (vd, vd);
+  const vd __builtin_vsx_xvcmpgedp (vd, vd);
     XVCMPGEDP vector_gev2df {}
 
   const signed int __builtin_vsx_xvcmpgedp_p (signed int, vd, vd);
     XVCMPGEDP_P vector_ge_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpgesp (vf, vf);
+  const vf __builtin_vsx_xvcmpgesp (vf, vf);
     XVCMPGESP vector_gev4sf {}
 
   const signed int __builtin_vsx_xvcmpgesp_p (signed int, vf, vf);
     XVCMPGESP_P vector_ge_v4sf_p {pred}
 
-  const vbll __builtin_vsx_xvcmpgtdp (vd, vd);
+  const vd __builtin_vsx_xvcmpgtdp (vd, vd);
     XVCMPGTDP vector_gtv2df {}
 
   const signed int __builtin_vsx_xvcmpgtdp_p (signed int, vd, vd);
     XVCMPGTDP_P vector_gt_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpgtsp (vf, vf);
+  const vf __builtin_vsx_xvcmpgtsp (vf, vf);
     XVCMPGTSP vector_gtv4sf {}
 
   const signed int __builtin_vsx_xvcmpgtsp_p (signed int, vf, vf);
@@ -1927,25 +1927,25 @@
   const vsi __builtin_vsx_xxmrglw_4si (vsi, vsi);
     XXMRGLW_4SI vsx_xxmrglw_v4si {}
 
-  const vsc __builtin_vsx_xxpermdi_16qi (vsc, vsc, const int<1>);
+  const vsc __builtin_vsx_xxpermdi_16qi (vsc, vsc, const int<2>);
     XXPERMDI_16QI vsx_xxpermdi_v16qi {}
 
-  const vsq __builtin_vsx_xxpermdi_1ti (vsq, vsq, const int<1>);
+  const vsq __builtin_vsx_xxpermdi_1ti (vsq, vsq, const int<2>);
     XXPERMDI_1TI vsx_xxpermdi_v1ti {}
 
-  const vd __builtin_vsx_xxpermdi_2df (vd, vd, const int<1>);
+  const vd __builtin_vsx_xxpermdi_2df (vd, vd, const int<2>);
     XXPERMDI_2DF vsx_xxpermdi_v2df {}
 
-  const vsll __builtin_vsx_xxpermdi_2di (vsll, vsll, const int<1>);
+  const vsll __builtin_vsx_xxpermdi_2di (vsll, vsll, const int<2>);
     XXPERMDI_2DI vsx_xxpermdi_v2di {}
 
-  const vf __builtin_vsx_xxpermdi_4sf (vf, vf, const int<1>);
+  const vf __builtin_vsx_xxpermdi_4sf (vf, vf, const int<2>);
     XXPERMDI_4SF vsx_xxpermdi_v4sf {}
 
-  const vsi __builtin_vsx_xxpermdi_4si (vsi, vsi, const int<1>);
+  const vsi __builtin_vsx_xxpermdi_4si (vsi, vsi, const int<2>);
     XXPERMDI_4SI vsx_xxpermdi_v4si {}
 
-  const vss __builtin_vsx_xxpermdi_8hi (vss, vss, const int<1>);
+  const vss __builtin_vsx_xxpermdi_8hi (vss, vss, const int<2>);
     XXPERMDI_8HI vsx_xxpermdi_v8hi {}
 
   const vsc __builtin_vsx_xxsel_16qi (vsc, vsc, vsc);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index a2651e59c9f..90d17ee90e1 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -992,7 +992,7 @@
   signed int __builtin_vec_vcmpne_p (signed int, vbll, vsll);
     VCMPNED_P  VCMPNED_P_SB
 
-[VEC_CMPNEZ, vec_cmpnez, __builtin_vec_cmpnez, _ARCH_PWR9]
+[VEC_CMPNEZ, vec_cmpnez, __builtin_vec_vcmpnez, _ARCH_PWR9]
   vbc __builtin_vec_cmpnez (vsc, vsc);
     CMPNEZB  CMPNEZB_S
   vbc __builtin_vec_cmpnez (vuc, vuc);
@@ -1654,19 +1654,19 @@
     MTVSRBM
 
 [VEC_GENHM, vec_genhm, __builtin_vec_mtvsrhm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrhm (unsigned long long);
+  vus __builtin_vec_mtvsrhm (unsigned long long);
     MTVSRHM
 
 [VEC_GENWM, vec_genwm, __builtin_vec_mtvsrwm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrwm (unsigned long long);
+  vui __builtin_vec_mtvsrwm (unsigned long long);
     MTVSRWM
 
 [VEC_GENDM, vec_gendm, __builtin_vec_mtvsrdm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrdm (unsigned long long);
+  vull __builtin_vec_mtvsrdm (unsigned long long);
     MTVSRDM
 
 [VEC_GENQM, vec_genqm, __builtin_vec_mtvsrqm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrqm (unsigned long long);
+  vuq __builtin_vec_mtvsrqm (unsigned long long);
     MTVSRQM
 
 [VEC_GENPCVM, vec_genpcvm, __builtin_vec_xxgenpcvm, _ARCH_PWR10]
@@ -3462,7 +3462,7 @@
   vf __builtin_vec_xxspltiw (float);
     VXXSPLTIW_V4SF
 
-[VEC_SPLATID, vec_splatid, __builtin_vec_xxspltid, ARCH_PWR10]
+[VEC_SPLATID, vec_splatid, __builtin_vec_xxspltid, _ARCH_PWR10]
   vd __builtin_vec_xxspltid (float);
     VXXSPLTIDP
 
@@ -4417,6 +4417,8 @@
     LXVW4X_V16QI  LXVW4X_VUC
   vuc __builtin_vec_vsx_ld (signed long long, const unsigned char *);
     LXVW4X_V16QI  LXVW4X_UC
+  vbc __builtin_vec_vsx_ld (signed long long, const vbc *);
+    LXVW4X_V16QI  LXVW4X_VBC
   vss __builtin_vec_vsx_ld (signed long long, const vss *);
     LXVW4X_V8HI  LXVW4X_VSS
   vss __builtin_vec_vsx_ld (signed long long, const signed short *);
@@ -4425,6 +4427,8 @@
     LXVW4X_V8HI  LXVW4X_VUS
   vus __builtin_vec_vsx_ld (signed long long, const unsigned short *);
     LXVW4X_V8HI  LXVW4X_US
+  vbs __builtin_vec_vsx_ld (signed long long, const vbs *);
+    LXVW4X_V8HI  LXVW4X_VBS
   vp __builtin_vec_vsx_ld (signed long long, const vp *);
     LXVW4X_V8HI  LXVW4X_P
   vsi __builtin_vec_vsx_ld (signed long long, const vsi *);
@@ -4435,6 +4439,8 @@
     LXVW4X_V4SI  LXVW4X_VUI
   vui __builtin_vec_vsx_ld (signed long long, const unsigned int *);
     LXVW4X_V4SI  LXVW4X_UI
+  vbi __builtin_vec_vsx_ld (signed long long, const vbi *);
+    LXVW4X_V4SI  LXVW4X_VBI
   vsll __builtin_vec_vsx_ld (signed long long, const vsll *);
     LXVD2X_V2DI  LXVD2X_VSLL
   vsll __builtin_vec_vsx_ld (signed long long, const signed long long *);
@@ -4443,6 +4449,8 @@
     LXVD2X_V2DI  LXVD2X_VULL
   vull __builtin_vec_vsx_ld (signed long long, const unsigned long long *);
     LXVD2X_V2DI  LXVD2X_ULL
+  vbll __builtin_vec_vsx_ld (signed long long, const vbll *);
+    LXVD2X_V2DI  LXVD2X_VBLL
   vsq __builtin_vec_vsx_ld (signed long long, const vsq *);
     LXVD2X_V1TI  LXVD2X_VSQ
   vsq __builtin_vec_vsx_ld (signed long long, const signed __int128 *);
@@ -4519,13 +4527,13 @@
     SE_LXVRDX
 
 [VEC_XL_ZEXT, vec_xl_zext, __builtin_vec_xl_zext, _ARCH_PWR10]
-  vsq __builtin_vec_xl_zext (signed long long, const signed char *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned char *);
     ZE_LXVRBX
-  vsq __builtin_vec_xl_zext (signed long long, const signed short *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned short *);
     ZE_LXVRHX
-  vsq __builtin_vec_xl_zext (signed long long, const signed int *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned int *);
     ZE_LXVRWX
-  vsq __builtin_vec_xl_zext (signed long long, const signed long long *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned long long *);
     ZE_LXVRDX
 
 [VEC_XOR, vec_xor, __builtin_vec_xor]
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
index 895bb953b37..4e59cbffa17 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
@@ -20,7 +20,7 @@ do_vec_gnb (vector unsigned __int128 source, int stride)
     case 5:
       return vec_gnb (source, 1);	/* { dg-error "between 2 and 7" } */
     case 6:
-      return vec_gnb (source, stride);	/* { dg-error "unsigned literal" } */
+      return vec_gnb (source, stride);	/* { dg-error "literal" } */
     case 7:
       return vec_gnb (source, 7);
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
index f53c6dca0a9..d1ef054b488 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
@@ -12,5 +12,5 @@ test_all_not_equal_and_not_zero (vector unsigned short *arg1_p,
   vector unsigned short arg_2 = *arg2_p;
 
   return __builtin_vec_vcmpnez_p (__CR6_LT, arg_1, arg_2);
-  /* { dg-error "'__builtin_altivec_vcmpnezh_p' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezh_p' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
index 757acd93110..b5cdea5fb3e 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
@@ -11,5 +11,5 @@ test_any_equal (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
   vector unsigned int arg_2 = *arg2_p;
 
   return __builtin_vec_vcmpnez_p (__CR6_LT_REV, arg_1, arg_2);
-  /* { dg-error "'__builtin_altivec_vcmpnezw_p' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezw_p' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
index 811b32f1c32..320421e6028 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
@@ -10,5 +10,5 @@ fetch_data (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
   vector unsigned int arg_1 = *arg1_p;
   vector unsigned int arg_2 = *arg2_p;
 
-  return __builtin_vec_vcmpnez (arg_1, arg_2);	/* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vcmpnez (arg_1, arg_2);	/* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
index 6ee066d1eff..251285536c2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
@@ -9,5 +9,5 @@ count_leading_zero_byte_bits (vector unsigned char *arg1_p)
 {
   vector unsigned char arg_1 = *arg1_p;
 
-  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vclzlsbb_v16qi' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vclzlsbb_v16qi' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
index ecd0add70d0..83ca92daced 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
@@ -9,5 +9,5 @@ count_trailing_zero_byte_bits (vector unsigned char *arg1_p)
 {
   vector unsigned char arg_1 = *arg1_p;
 
-  return __builtin_vec_vctzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vctzlsbb_v16qi' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vctzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vctzlsbb_v16qi' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
index 3a51132a5a2..f30d49cb4cc 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
@@ -13,5 +13,5 @@ store_data (vector double *datap, double *address, size_t length)
 {
   vector double data = *datap;
 
-  __builtin_vec_stxvl (data, address, length); /* { dg-error "'__builtin_vec_stxvl' is not supported in this compiler configuration" } */
+  __builtin_vec_stxvl (data, address, length); /* { dg-error "'__builtin_altivec_stxvl' requires the" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:ed1b31043199153702c567e0bef36c058440eb11

commit ed1b31043199153702c567e0bef36c058440eb11
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 28 17:21:38 2021 -0600

    rs6000: More bug fixes
    
    2021-01-28  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Add deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def (__builtin_altivec_vgnb):
            Fix prototype.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/p9-vparity.c: Revert earlier changes.

Diff:
---
 gcc/config/rs6000/altivec.h                   | 22 ++++++++++++------
 gcc/config/rs6000/rs6000-builtin-new.def      |  2 +-
 gcc/config/rs6000/rs6000-overload.def         | 24 ++++++++++++++++++--
 gcc/testsuite/gcc.target/powerpc/p9-vparity.c | 32 +++++++++++++--------------
 4 files changed, 54 insertions(+), 26 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 86464722d07..a69e5a398d8 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -57,6 +57,21 @@
 
 #include "rs6000-vecdefines.h"
 
+/* Deprecated interfaces.  */
+#define vec_vsld vec_sld
+#define vec_vsrad vec_srad
+#define vec_vsrd vec_srd
+
+#ifdef _ARCH_PWR9
+#define __builtin_vec_vadub __builtin_vec_vadu
+#define __builtin_vec_vaduh __builtin_vec_vadu
+#define __builtin_vec_vaduw __builtin_vec_vadu
+#define __builtin_vec_vprtybw __builtin_vec_vprtyb
+#define __builtin_vec_vprtybd __builtin_vec_vprtyb
+#define __builtin_vec_vprtybq __builtin_vec_vprtyb
+#define vec_vrlnm vec_rlnm
+#endif
+
 /* Synonyms.  */
 /* Functions that are resolved by the backend to one of the
    typed builtins.  */
@@ -264,13 +279,6 @@ __altivec_scalar_pred(vec_any_nle,
    to #define vec_step to __builtin_vec_step.  */
 #define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
 
-/* Deprecated interfaces.  */
-#ifdef _ARCH_PWR9
-#define __builtin_vec_vadub __builtin_vec_vadu
-#define __builtin_vec_vaduh __builtin_vec_vadu
-#define __builtin_vec_vaduw __builtin_vec_vadu
-#endif
-
 #ifdef _ARCH_PWR10
 /* #### TODO:  Deal with Carl's new builtins.  */
 #define vec_mulh(a, b) __builtin_vec_mulh ((a), (b))
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 417fd2a35dd..84654e872e0 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -3183,7 +3183,7 @@
   const signed int __builtin_altivec_vextractmw (vui);
     VEXTRACTMW vec_extract_v4si {}
 
-  const unsigned long long __builtin_altivec_vgnb (vuq, const int <2,7>);
+  const unsigned long long __builtin_altivec_vgnb (vull, const int <2,7>);
     VGNB vgnb {}
 
   const vuc __builtin_altivec_vinsgubvlx (unsigned int, vuc, unsigned int);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 344c78b6a83..a2651e59c9f 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3071,7 +3071,7 @@
   vull __builtin_vec_rl (vull, vull);
     VRLD  VRLD_VULL
 
-[VEC_RLMI, vec_rlmi, __builtin_vec_rlmi]
+[VEC_RLMI, vec_rlmi, __builtin_vec_rlmi, _ARCH_PWR9]
   vui __builtin_vec_rlmi (vui, vui, vui);
     VRLWMI
   vull __builtin_vec_rlmi (vull, vull, vull);
@@ -3079,7 +3079,7 @@
 
 ; We SKIP vec_rlnm so that altivec.h can define it as the three-operand
 ; form we expose to the users.
-[VEC_RLNM, SKIP, __builtin_vec_rlnm]
+[VEC_RLNM, SKIP, __builtin_vec_rlnm, _ARCH_PWR9]
   vui __builtin_vec_rlnm (vui, vui);
     VRLWNM
   vull __builtin_vec_rlnm (vull, vull);
@@ -4320,6 +4320,26 @@
   vd __builtin_vec_insert_exp (vull, vull);
     VIEDP  VIEDP_VULL
 
+; It is truly unfortunate that vec_vprtyb has an incompatible set of
+; interfaces with vec_parity_lsbb.  So we can't even deprecate this.
+[VEC_VPRTYB, vec_vprtyb, __builtin_vec_vprtyb, _ARCH_PWR9]
+  vsi __builtin_vec_vprtyb (vsi);
+    VPRTYBW  VPRTYB_VSI
+  vui __builtin_vec_vprtyb (vui);
+    VPRTYBW  VPRTYB_VUI
+  vsll __builtin_vec_vprtyb (vsll);
+    VPRTYBD  VPRTYB_VSLL
+  vull __builtin_vec_vprtyb (vull);
+    VPRTYBD  VPRTYB_VULL
+  vsq __builtin_vec_vprtyb (vsq);
+    VPRTYBQ  VPRTYB_VSQ
+  vuq __builtin_vec_vprtyb (vuq);
+    VPRTYBQ  VPRTYB_VUQ
+  signed __int128 __builtin_vec_vprtyb (signed __int128);
+    VPRTYBQ  VPRTYB_SQ
+  unsigned __int128 __builtin_vec_vprtyb (unsigned __int128);
+    VPRTYBQ  VPRTYB_UQ
+
 [VEC_VSCEEQ, scalar_cmp_exp_eq, __builtin_vec_scalar_cmp_exp_eq, _ARCH_PWR9]
   signed int __builtin_vec_scalar_cmp_exp_eq (double, double);
     VSCEDPEQ
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
index 8897a5b6b7f..f4aba1567cd 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
@@ -9,97 +9,97 @@
 vector int
 parity_v4si_1s (vector int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector int
 parity_v4si_2s (vector int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybw (a);
 }
 
 vector unsigned int
 parity_v4si_1u (vector unsigned int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector unsigned int
 parity_v4si_2u (vector unsigned int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybw (a);
 }
 
 vector long long
 parity_v2di_1s (vector long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector long long
 parity_v2di_2s (vector long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybd (a);
 }
 
 vector unsigned long long
 parity_v2di_1u (vector unsigned long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector unsigned long long
 parity_v2di_2u (vector unsigned long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybd (a);
 }
 
 vector __int128_t
 parity_v1ti_1s (vector __int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector __int128_t
 parity_v1ti_2s (vector __int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 __int128_t
 parity_ti_3s (__int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 __int128_t
 parity_ti_4s (__int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 vector __uint128_t
 parity_v1ti_1u (vector __uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector __uint128_t
 parity_v1ti_2u (vector __uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 __uint128_t
 parity_ti_3u (__uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 __uint128_t
 parity_ti_4u (__uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 /* { dg-final { scan-assembler "vprtybd" } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1d603e60eac3b8aea4d246d7247093b9638c8fc4

commit 1d603e60eac3b8aea4d246d7247093b9638c8fc4
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 27 17:00:50 2021 -0600

    rs6000: More bug fixes
    
    2021-01-27  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h (__builtin_vec_vaduh): Fix.
            (__builtin_vec_vaduw): Fix.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/vadsdub-2.c: Remove deprecated interface.
            * gcc.target/powerpc/vadsduh-2.c: Likewise.
            * gcc.target/powerpc/vadsduw-2.c: Likewise.

Diff:
---
 gcc/config/rs6000/altivec.h                  |  4 +--
 gcc/config/rs6000/rs6000-builtin-new.def     | 14 +++++-----
 gcc/config/rs6000/rs6000-overload.def        | 38 ++++++++++++++--------------
 gcc/testsuite/gcc.target/powerpc/vadsdub-2.c |  2 +-
 gcc/testsuite/gcc.target/powerpc/vadsduh-2.c |  2 +-
 gcc/testsuite/gcc.target/powerpc/vadsduw-2.c |  2 +-
 6 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 1625670d24c..86464722d07 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -267,8 +267,8 @@ __altivec_scalar_pred(vec_any_nle,
 /* Deprecated interfaces.  */
 #ifdef _ARCH_PWR9
 #define __builtin_vec_vadub __builtin_vec_vadu
-#define __builtin_vec_vaduh __builtin_vec_vaduh
-#define __builtin_vec_vaduw __builtin_vec_vaduw
+#define __builtin_vec_vaduh __builtin_vec_vadu
+#define __builtin_vec_vaduw __builtin_vec_vadu
 #endif
 
 #ifdef _ARCH_PWR10
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 061470d8198..417fd2a35dd 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -203,7 +203,7 @@
   const __ibm128 __builtin_pack_ibm128 (double, double);
     PACK_IF packif {}
 
-  void __builtin_set_fpscr_rn (const int[0,7]);
+  void __builtin_set_fpscr_rn (const int[0,3]);
     SET_FPSCR_RN rs6000_set_fpscr_rn {}
 
   const double __builtin_unpack_ibm128 (__ibm128, const int<1>);
@@ -3186,22 +3186,22 @@
   const unsigned long long __builtin_altivec_vgnb (vuq, const int <2,7>);
     VGNB vgnb {}
 
-  const vuc __builtin_altivec_vinsgubvlx (unsigned char, vuc, unsigned int);
+  const vuc __builtin_altivec_vinsgubvlx (unsigned int, vuc, unsigned int);
     VINSERTGPRBL vinsertgl_v16qi {}
 
-  const vuc __builtin_altivec_vinsgubvrx (unsigned char, vuc, unsigned int);
+  const vuc __builtin_altivec_vinsgubvrx (unsigned int, vuc, unsigned int);
     VINSERTGPRBR vinsertgr_v16qi {}
 
-  const vull __builtin_altivec_vinsgudvlx (unsigned long long, vull, unsigned int);
+  const vull __builtin_altivec_vinsgudvlx (unsigned int, vull, unsigned int);
     VINSERTGPRDL vinsertgl_v2di {}
 
-  const vull __builtin_altivec_vinsgudvrx (unsigned long long, vull, unsigned int);
+  const vull __builtin_altivec_vinsgudvrx (unsigned int, vull, unsigned int);
     VINSERTGPRDR vinsertgr_v2di {}
 
-  const vus __builtin_altivec_vinsguhvlx (unsigned short, vus, unsigned int);
+  const vus __builtin_altivec_vinsguhvlx (unsigned int, vus, unsigned int);
     VINSERTGPRHL vinsertgl_v8hi {}
 
-  const vus __builtin_altivec_vinsguhvrx (unsigned short, vus, unsigned int);
+  const vus __builtin_altivec_vinsguhvrx (unsigned int, vus, unsigned int);
     VINSERTGPRHR vinsertgr_v8hi {}
 
   const vui __builtin_altivec_vinsguwvlx (unsigned int, vui, unsigned int);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index f9bf995de28..344c78b6a83 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -555,7 +555,7 @@
   vuc __builtin_vec_clrl (vuc, unsigned int);
     VCLRLB  VCLRLB_U
 
-[VEC_CLRR, vec_clrr, __builtin_vec_clrr, ARCH_PWR10]
+[VEC_CLRR, vec_clrr, __builtin_vec_clrr, _ARCH_PWR10]
   vsc __builtin_vec_clrr (vsc, unsigned int);
     VCLRRB  VCLRRB_S
   vuc __builtin_vec_clrr (vuc, unsigned int);
@@ -1054,7 +1054,7 @@
 
 [VEC_CNTTZM, vec_cnttzm, __builtin_vec_vctzdm, _ARCH_PWR10]
   vull __builtin_vec_vctzdm (vull, vull);
-    CNTTZDM
+    VCTZDM
 
 [VEC_CNTLZ_LSBB, vec_cntlz_lsbb, __builtin_vec_vclzlsbb, _ARCH_PWR9]
   signed int __builtin_vec_vclzlsbb (vsc);
@@ -1680,7 +1680,7 @@
     XXGENPCVM_V2DI
 
 [VEC_GNB, vec_gnb, __builtin_vec_gnb, _ARCH_PWR10]
-  vull __builtin_vec_gnb (vuq, unsigned char);
+  unsigned long long __builtin_vec_gnb (vuq, const int);
     VGNB
 
 ; There are no actual builtins for vec_insert.  There is special handling for
@@ -2856,25 +2856,25 @@
 
 [VEC_PERMX, vec_permx, __builtin_vec_xxpermx, _ARCH_PWR10]
   vsc __builtin_vec_xxpermx (vsc, vsc, vuc, const int);
-    XXPERMX_V16QI
+    XXPERMX_UV2DI  XXPERMX_VSC
   vuc __builtin_vec_xxpermx (vuc, vuc, vuc, const int);
-    XXPERMX_UV16QI
+    XXPERMX_UV2DI  XXPERMX_VUC
   vss __builtin_vec_xxpermx (vss, vss, vuc, const int);
-    XXPERMX_V8HI
+    XXPERMX_UV2DI  XXPERMX_VSS
   vus __builtin_vec_xxpermx (vus, vus, vuc, const int);
-    XXPERMX_UV8HI
+    XXPERMX_UV2DI  XXPERMX_VUS
   vsi __builtin_vec_xxpermx (vsi, vsi, vuc, const int);
-    XXPERMX_V4SI
+    XXPERMX_UV2DI  XXPERMX_VSI
   vui __builtin_vec_xxpermx (vui, vui, vuc, const int);
-    XXPERMX_UV4SI
+    XXPERMX_UV2DI  XXPERMX_VUI
   vsll __builtin_vec_xxpermx (vsll, vsll, vuc, const int);
-    XXPERMX_V2DI
+    XXPERMX_UV2DI  XXPERMX_VSLL
   vull __builtin_vec_xxpermx (vull, vull, vuc, const int);
-    XXPERMX_UV2DI
+    XXPERMX_UV2DI  XXPERMX_VULL
   vf __builtin_vec_xxpermx (vf, vf, vuc, const int);
-    XXPERMX_V4SF
+    XXPERMX_UV2DI  XXPERMX_VF
   vd __builtin_vec_xxpermx (vd, vd, vuc, const int);
-    XXPERMX_V2DF
+    XXPERMX_UV2DI  XXPERMX_VD
 
 [VEC_PERMXOR, vec_permxor, __builtin_vec_vpermxor]
   vsc __builtin_vec_vpermxor (vsc, vsc, vsc);
@@ -2917,17 +2917,17 @@
     VPOPCNTUD
 
 [VEC_PARITY_LSBB, vec_parity_lsbb, __builtin_vec_vparity_lsbb, _ARCH_PWR9]
-  vsi __builtin_vec_vparity_lsbb (vsi);
+  vui __builtin_vec_vparity_lsbb (vsi);
     VPRTYBW  VPRTYBW_S
-  vsi __builtin_vec_vparity_lsbb (vui);
+  vui __builtin_vec_vparity_lsbb (vui);
     VPRTYBW  VPRTYBW_U
-  vsll __builtin_vec_vparity_lsbb (vsll);
+  vull __builtin_vec_vparity_lsbb (vsll);
     VPRTYBD  VPRTYBD_S
-  vsll __builtin_vec_vparity_lsbb (vull);
+  vull __builtin_vec_vparity_lsbb (vull);
     VPRTYBD  VPRTYBD_U
-  vsq __builtin_vec_vparity_lsbb (vsq);
+  vuq __builtin_vec_vparity_lsbb (vsq);
     VPRTYBQ  VPRTYBQ_S
-  vsq __builtin_vec_vparity_lsbb (vuq);
+  vuq __builtin_vec_vparity_lsbb (vuq);
     VPRTYBQ  VPRTYBQ_U
 
 ; There are no actual builtins for vec_promote.  There is special handling for
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c b/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
index c3d1bc84ade..53e2d895d46 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
@@ -15,7 +15,7 @@ doAbsoluteDifferenceUnsigned (__vector unsigned char *p,
   source_1 = *p;
   source_2 = *q;
 
-  uc_result = vec_absdb (source_1, source_2);
+  uc_result = vec_absd (source_1, source_2);
   return uc_result;
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c b/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
index 7f17694cc09..6e28e62c043 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
@@ -14,7 +14,7 @@ doAbsoluteDifferenceUnsignedMacro (__vector unsigned short *p,
   source_1 = *p;
   source_2 = *q;
 
-  result = vec_absdh (source_1, source_2);
+  result = vec_absd (source_1, source_2);
   return result;
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c b/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
index a330f526c51..0a22ccd9067 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
@@ -14,7 +14,7 @@ doAbsoluteDifferenceUnsignedMacro (__vector unsigned int *p,
   source_1 = *p;
   source_2 = *q;
 
-  result = vec_absdw (source_1, source_2);
+  result = vec_absd (source_1, source_2);
   return result;
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:92a82cec66309dca22b888c31a52cca8b3978061

commit 92a82cec66309dca22b888c31a52cca8b3978061
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 27 10:06:53 2021 -0600

    rs6000: More bug fixes
    
    2021-01-27  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Add some deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Add missing break
            statements.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
            * config/rs6000/rs6000.c
            (rs6000_new_builtin_md_vectorized_function): Use
            rs6000_gen_builtins.
    
    gcc/testsuite/
            * gcc.target/powerpc/p8vector-builtin-2.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-3.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-4.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-8.c: Remove deprecated
            builtins.
            * gcc.target/powerpc/p8vector-int128-2.c: Likewise.
            * gcc.target/powerpc/p8vector-vbpermq.c: Likewise.
            * gcc.target/powerpc/p9-vparity.c: Likewise.
            * gcc.target/powerpc/pr79544.c: Likewise.
            * gcc.target/powerpc/pr80315-1.c: Adjust.
            * gcc.target/powerpc/pr80315-2.c: Adjust.
            * gcc.target/powerpc/pr80315-3.c: Adjust.
            * gcc.target/powerpc/pr80315-4.c: Adjust.
            * gcc.target/powerpc/pr88100.c: Adjust.
            * gcc.target/powerpc/pragma_misc9.c: Adjust.
            * gcc.target/powerpc/pragma_power9.c: Undefine
            _RS6000_VECDEFINES_H before including altivec.h.
            * gcc.target/powerpc/swaps-p8-46.c: Remove deprecated builtins.
            * gcc.target/powerpc/test_fpscr_drn_builtin_error.c: Adjust.
            * gcc.target/powerpc/test_fpscr_rn_builtin_error.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        |  9 +++--
 gcc/config/rs6000/rs6000-builtin-new.def           | 10 +++---
 gcc/config/rs6000/rs6000-c.c                       |  9 +++--
 gcc/config/rs6000/rs6000-overload.def              | 39 +++++++++++-----------
 gcc/config/rs6000/rs6000.c                         | 12 +++----
 .../gcc.target/powerpc/p8vector-builtin-2.c        | 16 ++++-----
 .../gcc.target/powerpc/p8vector-builtin-3.c        |  8 ++---
 .../gcc.target/powerpc/p8vector-builtin-4.c        | 18 +++++-----
 .../gcc.target/powerpc/p8vector-builtin-8.c        |  4 +--
 .../gcc.target/powerpc/p8vector-int128-1.c         | 16 ++++-----
 .../gcc.target/powerpc/p8vector-int128-2.c         |  4 +--
 .../gcc.target/powerpc/p8vector-vbpermq.c          |  4 +--
 gcc/testsuite/gcc.target/powerpc/p9-vparity.c      | 32 +++++++++---------
 gcc/testsuite/gcc.target/powerpc/pr79544.c         |  8 +----
 gcc/testsuite/gcc.target/powerpc/pr80315-1.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-2.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-3.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-4.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr88100.c         | 12 +++----
 gcc/testsuite/gcc.target/powerpc/pragma_misc9.c    |  2 +-
 gcc/testsuite/gcc.target/powerpc/pragma_power9.c   |  1 +
 gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c     |  5 +--
 .../powerpc/test_fpscr_drn_builtin_error.c         |  4 +--
 .../powerpc/test_fpscr_rn_builtin_error.c          | 12 +++----
 24 files changed, 117 insertions(+), 116 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 13c1081cd79..1625670d24c 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -264,6 +264,13 @@ __altivec_scalar_pred(vec_any_nle,
    to #define vec_step to __builtin_vec_step.  */
 #define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
 
+/* Deprecated interfaces.  */
+#ifdef _ARCH_PWR9
+#define __builtin_vec_vadub __builtin_vec_vadu
+#define __builtin_vec_vaduh __builtin_vec_vaduh
+#define __builtin_vec_vaduw __builtin_vec_vaduw
+#endif
+
 #ifdef _ARCH_PWR10
 /* #### TODO:  Deal with Carl's new builtins.  */
 #define vec_mulh(a, b) __builtin_vec_mulh ((a), (b))
@@ -271,6 +278,4 @@ __altivec_scalar_pred(vec_any_nle,
 #define vec_mod(a, b) __builtin_vec_mod ((a), (b))
 #endif
 
-=======
->>>>>>> rs6000: Revise altivec.h to use rs6000-vecdefines.h
 #endif /* _ALTIVEC_H */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 449dcd5e257..061470d8198 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -203,7 +203,7 @@
   const __ibm128 __builtin_pack_ibm128 (double, double);
     PACK_IF packif {}
 
-  void __builtin_set_fpscr_rn (signed long long);
+  void __builtin_set_fpscr_rn (const int[0,7]);
     SET_FPSCR_RN rs6000_set_fpscr_rn {}
 
   const double __builtin_unpack_ibm128 (__ibm128, const int<1>);
@@ -1698,7 +1698,7 @@
   const vull __builtin_vsx_xvcvdpuxds (vd);
     XVCVDPUXDS vsx_fixuns_truncv2dfv2di2 {}
 
-  const vull __builtin_vsx_xvcvdpuxds_scale (vd, const int);
+  const vsll __builtin_vsx_xvcvdpuxds_scale (vd, const int);
     XVCVDPUXDS_SCALE vsx_xvcvdpuxds_scale {}
 
 ; Redundant with __builtin_vsx_xvcvdpuxds
@@ -2946,7 +2946,7 @@
   const _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
     PACK_TD packtd {}
 
-  void __builtin_set_fpscr_drn (signed long long);
+  void __builtin_set_fpscr_drn (const int[0,7]);
     SET_FPSCR_DRN rs6000_set_fpscr_drn {}
 
   const unsigned long long __builtin_unpack_dec128 (_Decimal128, const int<1>);
@@ -3348,13 +3348,13 @@
   const vuc __builtin_vsx_xxblend_v16qi (vuc, vuc, vuc);
     VXXBLEND_V16QI xxblend_v16qi {}
 
-  const vd __builtin_vsx_xxblend_v2df (vd, vd, vull);
+  const vd __builtin_vsx_xxblend_v2df (vd, vd, vd);
     VXXBLEND_V2DF xxblend_v2df {}
 
   const vull __builtin_vsx_xxblend_v2di (vull, vull, vull);
     VXXBLEND_V2DI xxblend_v2di {}
 
-  const vf __builtin_vsx_xxblend_v4sf (vf, vf, vui);
+  const vf __builtin_vsx_xxblend_v4sf (vf, vf, vf);
     VXXBLEND_V4SF xxblend_v4sf {}
 
   const vui __builtin_vsx_xxblend_v4si (vui, vui, vui);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index a3fe6f2abc9..199e22a7c50 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2247,10 +2247,9 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 							     params);
 	    }
 	  /* For {un}signed __int128s use the vaddeuqm/vsubeuqm instruction
-	     directly.  This is done by the normal processing.  */
+	     directly.  */
 	  case E_TImode:
-	    {
-	    }
+	    break;
 
 	  /* Types other than {un}signed int and {un}signed __int128
 		are errors.  */
@@ -2347,8 +2346,8 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	  /* For {un}signed __int128s use the vaddecuq/vsubbecuq
 	     instructions.  This occurs through normal processing.  */
 	  case E_TImode:
-	    {
-	    }
+	    break;
+
 	  /* Types other than {un}signed int and {un}signed __int128
 		are errors.  */
 	  default:
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index f6e43b88e07..f9bf995de28 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -433,7 +433,7 @@
   vui __builtin_vec_andc (vui, vui);
     VANDC_V4SI_UNS VANDC_VUI
   vbll __builtin_vec_andc (vbll, vbll);
-    VANDC_V4SI_UNS VANDC_VBLL
+    VANDC_V2DI_UNS VANDC_VBLL
   vsll __builtin_vec_andc (vsll, vsll);
     VANDC_V2DI
   vull __builtin_vec_andc (vull, vull);
@@ -526,7 +526,9 @@
   vull __builtin_vec_vbperm_api (vuq, vuc);
     VBPERMD  VBPERMD_VUQ
   vuc __builtin_vec_vbperm_api (vuc, vuc);
-    VBPERMQ2
+    VBPERMQ2  VBPERMQ2_U
+  vsc __builtin_vec_vbperm_api (vsc, vsc);
+    VBPERMQ2  VBPERMQ2_S
 
 ; #### XVRSPIP{TARGET_VSX};VRFIP
 [VEC_CEIL, vec_ceil, __builtin_vec_ceil]
@@ -2915,17 +2917,17 @@
     VPOPCNTUD
 
 [VEC_PARITY_LSBB, vec_parity_lsbb, __builtin_vec_vparity_lsbb, _ARCH_PWR9]
-  vui __builtin_vec_vparity_lsbb (vsi);
+  vsi __builtin_vec_vparity_lsbb (vsi);
     VPRTYBW  VPRTYBW_S
-  vui __builtin_vec_vparity_lsbb (vui);
+  vsi __builtin_vec_vparity_lsbb (vui);
     VPRTYBW  VPRTYBW_U
-  vull __builtin_vec_vparity_lsbb (vsll);
+  vsll __builtin_vec_vparity_lsbb (vsll);
     VPRTYBD  VPRTYBD_S
-  vull __builtin_vec_vparity_lsbb (vull);
+  vsll __builtin_vec_vparity_lsbb (vull);
     VPRTYBD  VPRTYBD_U
-  vuq __builtin_vec_vparity_lsbb (vsq);
+  vsq __builtin_vec_vparity_lsbb (vsq);
     VPRTYBQ  VPRTYBQ_S
-  vuq __builtin_vec_vparity_lsbb (vuq);
+  vsq __builtin_vec_vparity_lsbb (vuq);
     VPRTYBQ  VPRTYBQ_U
 
 ; There are no actual builtins for vec_promote.  There is special handling for
@@ -3276,17 +3278,17 @@
   vuc __builtin_vec_sldw (vuc, vuc, const int);
     XXSLDWI_16QI  XXSLDWI_VUC
   vss __builtin_vec_sldw (vss, vss, const int);
-    XXSLDWI_16QI  XXSLDWI_VSS
+    XXSLDWI_8HI  XXSLDWI_VSS
   vus __builtin_vec_sldw (vus, vus, const int);
-    XXSLDWI_16QI  XXSLDWI_VUS
+    XXSLDWI_8HI  XXSLDWI_VUS
   vsi __builtin_vec_sldw (vsi, vsi, const int);
-    XXSLDWI_16QI  XXSLDWI_VSI
+    XXSLDWI_4SI  XXSLDWI_VSI
   vui __builtin_vec_sldw (vui, vui, const int);
-    XXSLDWI_16QI  XXSLDWI_VUI
+    XXSLDWI_4SI  XXSLDWI_VUI
   vsll __builtin_vec_sldw (vsll, vsll, const int);
-    XXSLDWI_16QI  XXSLDWI_VSLL
+    XXSLDWI_2DI  XXSLDWI_VSLL
   vull __builtin_vec_sldw (vull, vull, const int);
-    XXSLDWI_16QI  XXSLDWI_VULL
+    XXSLDWI_2DI  XXSLDWI_VULL
 
 [VEC_SLL, vec_sll, __builtin_vec_sll]
   vsc __builtin_vec_sll (vsc, vuc);
@@ -4119,11 +4121,8 @@
     VSUBCUQ  VSUBCUQ_VUQ
 
 ; TODO: Note that the entry for VEC_SUBE currently gets ignored in
-; altivec_resolve_overloaded_builtin.  There are also forms for
-; vsi and vui arguments, but rather than building a define_expand
-; for the instruction sequence generated for those, we do some RTL
-; hackery.  Revisit whether we can remove that.  For now, keep this
-; much of the entry here to generate the #define, at least.
+; altivec_resolve_overloaded_builtin.  Revisit whether we can remove
+; that.  We still need to register the legal builtin forms here.
 [VEC_SUBE, vec_sube, __builtin_vec_sube]
   vsq __builtin_vec_sube (vsq, vsq, vsq);
     VSUBEUQM  VSUBEUQM_VSQ
@@ -4406,6 +4405,8 @@
     LXVW4X_V8HI  LXVW4X_VUS
   vus __builtin_vec_vsx_ld (signed long long, const unsigned short *);
     LXVW4X_V8HI  LXVW4X_US
+  vp __builtin_vec_vsx_ld (signed long long, const vp *);
+    LXVW4X_V8HI  LXVW4X_P
   vsi __builtin_vec_vsx_ld (signed long long, const vsi *);
     LXVW4X_V4SI  LXVW4X_VSI
   vsi __builtin_vec_vsx_ld (signed long long, const signed int *);
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index fb512fd9f0f..cda871a11ca 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5583,29 +5583,29 @@ rs6000_new_builtin_md_vectorized_function (tree fndecl, tree type_out,
   in_mode = TYPE_MODE (TREE_TYPE (type_in));
   in_n = TYPE_VECTOR_SUBPARTS (type_in);
 
-  enum rs6000_builtins fn
-    = (enum rs6000_builtins) DECL_MD_FUNCTION_CODE (fndecl);
+  enum rs6000_gen_builtins fn
+    = (enum rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);
   switch (fn)
     {
-    case RS6000_BUILTIN_RSQRTF:
+    case RS6000_BIF_RSQRTF:
       if (VECTOR_UNIT_ALTIVEC_OR_VSX_P (V4SFmode)
 	  && out_mode == SFmode && out_n == 4
 	  && in_mode == SFmode && in_n == 4)
 	return rs6000_builtin_decls_x[RS6000_BIF_VRSQRTFP];
       break;
-    case RS6000_BUILTIN_RSQRT:
+    case RS6000_BIF_RSQRT:
       if (VECTOR_UNIT_VSX_P (V2DFmode)
 	  && out_mode == DFmode && out_n == 2
 	  && in_mode == DFmode && in_n == 2)
 	return rs6000_builtin_decls_x[RS6000_BIF_RSQRT_2DF];
       break;
-    case RS6000_BUILTIN_RECIPF:
+    case RS6000_BIF_RECIPF:
       if (VECTOR_UNIT_ALTIVEC_OR_VSX_P (V4SFmode)
 	  && out_mode == SFmode && out_n == 4
 	  && in_mode == SFmode && in_n == 4)
 	return rs6000_builtin_decls_x[RS6000_BIF_VRECIPFP];
       break;
-    case RS6000_BUILTIN_RECIP:
+    case RS6000_BIF_RECIP:
       if (VECTOR_UNIT_VSX_P (V2DFmode)
 	  && out_mode == DFmode && out_n == 2
 	  && in_mode == DFmode && in_n == 2)
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
index 0259e364aa6..a1f4e4e9a4e 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
@@ -214,17 +214,17 @@ v_bshort vbshort_ne (v_bshort a, v_bshort b)
 }
 
 
-/* { dg-final { scan-assembler-times "vaddudm" 	5 } } */
-/* { dg-final { scan-assembler-times "vsubudm" 	6 } } */
-/* { dg-final { scan-assembler-times "vmaxsd"  	4 } } */
-/* { dg-final { scan-assembler-times "vminsd"  	3 } } */
-/* { dg-final { scan-assembler-times "vmaxud"  	2 } } */
-/* { dg-final { scan-assembler-times "vminud"  	2 } } */
+/* { dg-final { scan-assembler-times "vaddudm" 	3 } } */
+/* { dg-final { scan-assembler-times "vsubudm" 	4 } } */
+/* { dg-final { scan-assembler-times "vmaxsd"  	3 } } */
+/* { dg-final { scan-assembler-times "vminsd"  	2 } } */
+/* { dg-final { scan-assembler-times "vmaxud"  	1 } } */
+/* { dg-final { scan-assembler-times "vminud"  	1 } } */
 /* { dg-final { scan-assembler-times "vcmpequd" 6 } } */
 /* { dg-final { scan-assembler-times "vcmpgtsd" 1 } } */
 /* { dg-final { scan-assembler-times "vcmpgtud" 1 } } */
 /* { dg-final { scan-assembler-times "vrld"     3 } } */
-/* { dg-final { scan-assembler-times "vsld"     5 } } */
-/* { dg-final { scan-assembler-times "vsrad"    3 } } */
+/* { dg-final { scan-assembler-times "vsld"     3 } } */
+/* { dg-final { scan-assembler-times "vsrad"    2 } } */
 /* { dg-final { scan-assembler-times "vcmpequb" 3 } } */
 /* { dg-final { scan-assembler-times "vcmpequw" 6 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
index ae6a3a8437b..0b038edfafe 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
@@ -77,8 +77,8 @@ vll_sign vll_unpack_lo_2 (vi_sign a)
   return vec_unpackl (a);
 }
 
-/* { dg-final { scan-assembler-times "vpkudum" 4 } } */
-/* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
-/* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkudum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkuwum" 2 } } */
+/* { dg-final { scan-assembler-times "vpkuhum" 2 } } */
 /* { dg-final { scan-assembler-times "vupklsw" 3 } } */
-/* { dg-final { scan-assembler-times "vupkhsw" 3 } } */
+/* { dg-final { scan-assembler-times "vupkhsw" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
index 2d2d141948f..e814c648843 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
@@ -156,14 +156,14 @@ vc_uns vc_gbb_3 (vc_uns a)
   return vec_gb (a);
 }
 
-/* { dg-final { scan-assembler-times "vclzd" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzw" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzh" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzb" 	5 } } */
-
-/* { dg-final { scan-assembler-times "vpopcntd" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcntw" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcnth" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcntb" 5 } } */
+/* { dg-final { scan-assembler-times "vclzd" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzw" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzh" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzb" 	3 } } */
+
+/* { dg-final { scan-assembler-times "vpopcntd" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcntw" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcnth" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcntb" 3 } } */
 
 /* { dg-final { scan-assembler-times "vgbbd"    3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
index 0cfbe68c3a4..b5c81ab1ace 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
@@ -112,7 +112,6 @@ void foo (vector signed char *vscr,
   *vsir++ = vec_sum4s (vsca, vsib);
   *vsir++ = vec_sum4s (vssa, vsib);
   *vuir++ = vec_sum4s (vuca, vuib);
-
 }
 
 /* { dg-final { scan-assembler-times "vaddcuq" 2 } } */
@@ -125,7 +124,8 @@ void foo (vector signed char *vscr,
 /* { dg-final { scan-assembler-times "vsubecuq" 2 } } */
 /* { dg-final { scan-assembler-times "vsubcuw" 4 } } */
 /* { dg-final { scan-assembler-times "vsubuwm" 4 } } */
-/* { dg-final { scan-assembler-times "vbpermq" 2 } } */
+/* { dg-final { scan-assembler-times "vbpermq" 1 } } */
+/* { dg-final { scan-assembler-times "vbpermd" 1 } } */
 /* { dg-final { scan-assembler-times "xxleqv" 4 } } */
 /* { dg-final { scan-assembler-times "vgbbd" 1 } } */
 /* { dg-final { scan-assembler-times "xxlnand" 4 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
index 28b148c692c..8a7484b7144 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
@@ -13,49 +13,49 @@
 TYPE
 do_addcuq (TYPE p, TYPE q)
 {
-  return __builtin_vec_vaddcuq (p, q);
+  return vec_addc (p, q);
 }
 
 TYPE
 do_adduqm (TYPE p, TYPE q)
 {
-  return __builtin_vec_add (p, q);
+  return vec_add (p, q);
 }
 
 TYPE
 do_addeuqm (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vaddeuqm (p, q, r);
+  return vec_adde (p, q, r);
 }
 
 TYPE
 do_addecuq (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vaddecuq (p, q, r);
+  return vec_addec (p, q, r);
 }
 
 TYPE
 do_subeuqm (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vsubeuqm (p, q, r);
+  return vec_sube (p, q, r);
 }
 
 TYPE
 do_subecuq (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vsubecuq (p, q, r);
+  return vec_subec (p, q, r);
 }
 
 TYPE
 do_subcuq (TYPE p, TYPE q)
 {
-  return __builtin_vec_vsubcuq (p, q);
+  return vec_subc (p, q);
 }
 
 TYPE
 do_subuqm (TYPE p, TYPE q)
 {
-  return __builtin_vec_vsubuqm (p, q);
+  return vec_sub (p, q);
 }
 
 TYPE
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
index 72358d616b1..cdeebb36342 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
@@ -132,7 +132,7 @@ main (void)
 
       v_reg_in1 = (V_TYPE) { s_reg_in1 };
       v_reg_in2 = (V_TYPE) { s_reg_in2 };
-      v_reg_res = vec_vadduqm (v_reg_in1, v_reg_in2);
+      v_reg_res = vec_add (v_reg_in1, v_reg_in2);
       reg_errors += compare (s_reg_res, v_reg_res, "", "reg, res");
 
       s_mem_in1 = s_reg_in1;
@@ -144,7 +144,7 @@ main (void)
       mem_errors += compare (s_mem_in2, (V_TYPE) { s_mem_in2 }, "", "mem, in2");
 
       s_mem_res = s_mem_in1 + s_mem_in2;
-      v_mem_res = vec_vadduqm (v_mem_in1, v_mem_in2);
+      v_mem_res = vec_add (v_mem_in1, v_mem_in2);
       mem_errors += compare (s_mem_res, v_mem_res, "", "mem, res");
 
       nl = "\n";
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c b/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
index c2ab68ba761..e5601b13b3a 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
@@ -17,11 +17,11 @@
 
 long foos (vector signed char a, vector signed char b)
 {
-  return vec_extract (vec_vbpermq (a, b), OFFSET);
+  return vec_extract (vec_bperm (a, b), OFFSET);
 }
 
 long foou (vector unsigned char a, vector unsigned char b)
 {
-  return vec_extract (vec_vbpermq (a, b), OFFSET);
+  return vec_extract (vec_bperm (a, b), OFFSET);
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
index f4aba1567cd..8897a5b6b7f 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
@@ -9,97 +9,97 @@
 vector int
 parity_v4si_1s (vector int a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector int
 parity_v4si_2s (vector int a)
 {
-  return vec_vprtybw (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned int
 parity_v4si_1u (vector unsigned int a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned int
 parity_v4si_2u (vector unsigned int a)
 {
-  return vec_vprtybw (a);
+  return vec_parity_lsbb (a);
 }
 
 vector long long
 parity_v2di_1s (vector long long a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector long long
 parity_v2di_2s (vector long long a)
 {
-  return vec_vprtybd (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned long long
 parity_v2di_1u (vector unsigned long long a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned long long
 parity_v2di_2u (vector unsigned long long a)
 {
-  return vec_vprtybd (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __int128_t
 parity_v1ti_1s (vector __int128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __int128_t
 parity_v1ti_2s (vector __int128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 __int128_t
 parity_ti_3s (__int128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 __int128_t
 parity_ti_4s (__int128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __uint128_t
 parity_v1ti_1u (vector __uint128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __uint128_t
 parity_v1ti_2u (vector __uint128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 __uint128_t
 parity_ti_3u (__uint128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 __uint128_t
 parity_ti_4u (__uint128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 /* { dg-final { scan-assembler "vprtybd" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79544.c b/gcc/testsuite/gcc.target/powerpc/pr79544.c
index 3f782489bbd..ecdbbcc67bd 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr79544.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr79544.c
@@ -10,11 +10,5 @@ test_sra (vector unsigned long long x, vector unsigned long long y)
   return vec_sra (x, y);
 }
 
-vector unsigned long long
-test_vsrad (vector unsigned long long x, vector unsigned long long y)
-{
-  return vec_vsrad (x, y);
-}
-
-/* { dg-final { scan-assembler-times {\mvsrad\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mvsrad\M} 1 } } */
 
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-1.c b/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
index e2db0ff4b5f..f37f1f169a2 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
@@ -10,6 +10,6 @@ main()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = __builtin_crypto_vshasigmaw (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = __builtin_crypto_vshasigmaw (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return 0;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-2.c b/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
index 144b705c012..0819a0511b7 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
@@ -10,6 +10,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = __builtin_crypto_vshasigmad (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = __builtin_crypto_vshasigmad (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return 0;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-3.c b/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
index 99a3e24eadd..cc2e46cf5cb 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
@@ -12,6 +12,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return res;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-4.c b/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
index 7f5f6f75029..ac12910741b 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
@@ -12,6 +12,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return res;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr88100.c b/gcc/testsuite/gcc.target/powerpc/pr88100.c
index 4452145ce95..764c897a497 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr88100.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr88100.c
@@ -10,35 +10,35 @@
 vector unsigned char
 splatu1 (void)
 {
-  return vec_splat_u8(0x100);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u8(0x100);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned short
 splatu2 (void)
 {
-  return vec_splat_u16(0x10000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u16(0x10000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned int
 splatu3 (void)
 {
-  return vec_splat_u32(0x10000000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u32(0x10000000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed char
 splats1 (void)
 {
-  return vec_splat_s8(0x100);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s8(0x100);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed short
 splats2 (void)
 {
-  return vec_splat_s16(0x10000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s16(0x10000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed int
 splats3 (void)
 {
-  return vec_splat_s32(0x10000000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s32(0x10000000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c b/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
index e03099bd084..61274463653 100644
--- a/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
+++ b/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
@@ -20,7 +20,7 @@ vector bool int
 test2 (vector signed int a, vector signed int b)
 {
   return vec_cmpnez (a, b);
-  /* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
 
 #pragma GCC target ("cpu=power7")
diff --git a/gcc/testsuite/gcc.target/powerpc/pragma_power9.c b/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
index e33aad1aaf7..5327c8c8cc8 100644
--- a/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
+++ b/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
@@ -50,6 +50,7 @@ test3b (vec_t a, vec_t b)
 
 #pragma GCC target ("cpu=power9,power9-vector")
 #undef _ALTIVEC_H
+#undef _RS6000_VECDEFINES_H
 #include <altivec.h>
 #ifdef _ARCH_PWR9
 vector bool int
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
index 4738d5e0139..3911ac9e713 100644
--- a/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
+++ b/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
@@ -2,6 +2,7 @@
 /* { dg-require-effective-target powerpc_p8vector_ok } */
 /* { dg-options "-mdejagnu-cpu=power8 -O2 " } */
 
+#include <altivec.h>
 typedef __attribute__ ((__aligned__ (8))) unsigned long long __m64;
 typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
 
@@ -17,8 +18,8 @@ _mm_movemask_ps (__m128 *__A)
     };
 
   result = (__vector __m64)
-    __builtin_vec_vbpermq ((__vector unsigned char) (*__A),
-			   (__vector unsigned char) perm_mask);
+    vec_bperm ((__vector unsigned char) (*__A),
+	       (__vector unsigned char) perm_mask);
   return result[1];
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
index 028ab0b6d66..4f9d9e08e8a 100644
--- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
+++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
@@ -9,8 +9,8 @@ int main ()
      __builtin_set_fpscr_drn() also support a variable as an argument but
      can't test variable value at compile time.  */
 
-  __builtin_set_fpscr_drn(-1);  /* { dg-error "Argument must be a value between 0 and 7" } */ 
-  __builtin_set_fpscr_drn(8);   /* { dg-error "Argument must be a value between 0 and 7" } */ 
+  __builtin_set_fpscr_drn(-1);  /* { dg-error "argument 1 must be a variable or a literal between 0 and 7, inclusive" } */ 
+  __builtin_set_fpscr_drn(8);   /* { dg-error "argument 1 must be a variable or a literal between 0 and 7, inclusive" } */ 
 
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
index aea65091b0c..10391b71008 100644
--- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
+++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
@@ -8,13 +8,13 @@ int main ()
      int arguments.  The builtins __builtin_set_fpscr_rn() also supports a
      variable as an argument but can't test variable value at compile time.  */
 
-  __builtin_mtfsb0(-1);  /* { dg-error "Argument must be a constant between 0 and 31" } */
-  __builtin_mtfsb0(32);  /* { dg-error "Argument must be a constant between 0 and 31" } */
+  __builtin_mtfsb0(-1);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
+  __builtin_mtfsb0(32);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
 
-  __builtin_mtfsb1(-1);  /* { dg-error "Argument must be a constant between 0 and 31" } */
-  __builtin_mtfsb1(32);  /* { dg-error "Argument must be a constant between 0 and 31" } */ 
+  __builtin_mtfsb1(-1);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
+  __builtin_mtfsb1(32);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */ 
 
-  __builtin_set_fpscr_rn(-1);  /* { dg-error "Argument must be a value between 0 and 3" } */ 
-  __builtin_set_fpscr_rn(4);   /* { dg-error "Argument must be a value between 0 and 3" } */ 
+  __builtin_set_fpscr_rn(-1);  /* { dg-error "argument 1 must be a variable or a literal between 0 and 3, inclusive" } */ 
+  __builtin_set_fpscr_rn(4);   /* { dg-error "argument 1 must be a variable or a literal between 0 and 3, inclusive" } */ 
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:fe662739412e4c690cdddea8d75d07eac8e006e7

commit fe662739412e4c690cdddea8d75d07eac8e006e7
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 14 17:06:55 2021 -0600

    rs6000: More bug fixes
    
    2021-01-14  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-7.c: Adjust.
            * gcc.target/powerpc/cmpb-2.c: Adjust.
            * gcc.target/powerpc/cmpb32-2.c: Adjust.
            * gcc.target/powerpc/fold-vec-mule-misc.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-floatdouble.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-longlong.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-misc-invalid.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-2.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-3.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-4.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-7.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        |   2 +
 gcc/config/rs6000/rs6000-builtin-new.def           |  24 ++--
 gcc/config/rs6000/rs6000-overload.def              |  11 +-
 gcc/testsuite/gcc.target/powerpc/altivec-7.c       |   2 +-
 gcc/testsuite/gcc.target/powerpc/cmpb-2.c          |   2 +-
 gcc/testsuite/gcc.target/powerpc/cmpb32-2.c        |   2 +-
 .../gcc.target/powerpc/fold-vec-mule-misc.c        |   8 +-
 .../powerpc/fold-vec-splat-floatdouble.c           |   4 +-
 .../gcc.target/powerpc/fold-vec-splat-longlong.c   |  10 +-
 .../powerpc/fold-vec-splat-misc-invalid.c          |   8 +-
 .../gcc.target/powerpc/p8vector-builtin-2.c        |  55 ---------
 .../gcc.target/powerpc/p8vector-builtin-3.c        |  27 +----
 .../gcc.target/powerpc/p8vector-builtin-4.c        | 124 ++++-----------------
 .../gcc.target/powerpc/p8vector-builtin-7.c        |   8 +-
 14 files changed, 61 insertions(+), 226 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 76432d545c4..13c1081cd79 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -66,6 +66,8 @@
 /* VSX additions */
 #define vec_vsx_ld __builtin_vec_vsx_ld
 #define vec_vsx_st __builtin_vec_vsx_st
+#define __builtin_vec_xl __builtin_vec_vsx_ld
+#define __builtin_vec_xst __builtin_vec_vsx_st
 
 #define __builtin_bcdadd_ofl __builtin_vec_bcdadd_ov
 #define __builtin_bcdsub_ofl __builtin_vec_bcdsub_ov
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 9c4470bf400..449dcd5e257 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -805,13 +805,13 @@
   const vus __builtin_altivec_vpkswus (vsi, vsi);
     VPKSWUS altivec_vpkswus {}
 
-  const vuc __builtin_altivec_vpkuhum (vus, vus);
+  const vsc __builtin_altivec_vpkuhum (vss, vss);
     VPKUHUM altivec_vpkuhum {}
 
   const vuc __builtin_altivec_vpkuhus (vus, vus);
     VPKUHUS altivec_vpkuhus {}
 
-  const vus __builtin_altivec_vpkuwum (vui, vui);
+  const vss __builtin_altivec_vpkuwum (vsi, vsi);
     VPKUWUM altivec_vpkuwum {}
 
   const vus __builtin_altivec_vpkuwus (vui, vui);
@@ -1219,7 +1219,7 @@
   const vsll __builtin_altivec_vreve_v2di (vsll);
     VREVE_V2DI altivec_vrevev2di2 {}
 
-  const vd __builtin_altivec_vsel_2df (vd, vd, vull);
+  const vd __builtin_altivec_vsel_2df (vd, vd, vd);
     VSEL_2DF vector_select_v2df {}
 
   const vsll __builtin_altivec_vsel_2di (vsll, vsll, vull);
@@ -2263,7 +2263,7 @@
   const vui __builtin_altivec_vpksdus (vsll, vsll);
     VPKSDUS altivec_vpksdus {}
 
-  const vui __builtin_altivec_vpkudum (vull, vull);
+  const vsi __builtin_altivec_vpkudum (vsll, vsll);
     VPKUDUM altivec_vpkudum {}
 
   const vui __builtin_altivec_vpkudus (vull, vull);
@@ -2285,13 +2285,13 @@
 ;  const vull __builtin_altivec_vpmsumw (vui, vui);
 ;    VPMSUMW crypto_vpmsumw {}
 
-  const vuc __builtin_altivec_vpopcntb (vsc);
+  const vsc __builtin_altivec_vpopcntb (vsc);
     VPOPCNTB popcountv16qi2 {}
 
-  const vull __builtin_altivec_vpopcntd (vsll);
+  const vsll __builtin_altivec_vpopcntd (vsll);
     VPOPCNTD popcountv2di2 {}
 
-  const vus __builtin_altivec_vpopcnth (vss);
+  const vss __builtin_altivec_vpopcnth (vss);
     VPOPCNTH popcountv8hi2 {}
 
   const vuc __builtin_altivec_vpopcntub (vuc);
@@ -2306,16 +2306,16 @@
   const vui __builtin_altivec_vpopcntuw (vui);
     VPOPCNTUW popcountv4si2 {}
 
-  const vui __builtin_altivec_vpopcntw (vsi);
+  const vsi __builtin_altivec_vpopcntw (vsi);
     VPOPCNTW popcountv4si2 {}
 
-  const vsll __builtin_altivec_vrld (vsll, vull);
+  const vsll __builtin_altivec_vrld (vsll, vsll);
     VRLD vrotlv2di3 {}
 
-  const vsll __builtin_altivec_vsld (vsll, vull);
+  const vsll __builtin_altivec_vsld (vsll, vsll);
     VSLD vashlv2di3 {}
 
-  const vsll __builtin_altivec_vsrad (vsll, vull);
+  const vsll __builtin_altivec_vsrad (vsll, vsll);
     VSRAD vashrv2di3 {}
 
   const vsll __builtin_altivec_vsrd (vsll, vull);
@@ -2330,7 +2330,7 @@
   const vuq __builtin_altivec_vsubeuqm (vuq, vuq, vuq);
     VSUBEUQM altivec_vsubeuqm {}
 
-  const vull __builtin_altivec_vsubudm (vull, vull);
+  const vsll __builtin_altivec_vsubudm (vsll, vsll);
     VSUBUDM subv2di3 {}
 
   const vuq __builtin_altivec_vsubuqm (vuq, vuq);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index e80e163f8ec..f6e43b88e07 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3830,7 +3830,7 @@
   void __builtin_vec_stl (vd, signed long long, double *);
     STVXL_V2DF  STVXL_D
 
-[VEC_STRIL, vec_stril, __builtin_vec_stril, ARCH_PWR10]
+[VEC_STRIL, vec_stril, __builtin_vec_stril, _ARCH_PWR10]
   vuc __builtin_vec_stril (vuc);
     VSTRIBL  VSTRIBL_U
   vsc __builtin_vec_stril (vsc);
@@ -3860,7 +3860,7 @@
   vss __builtin_vec_strir (vss);
     VSTRIHR  VSTRIHR_S
 
-[VEC_STRIR_P, vec_strir_p, __builtin_vec_strir_p, ARCH_PWR10]
+[VEC_STRIR_P, vec_strir_p, __builtin_vec_strir_p, _ARCH_PWR10]
   signed int __builtin_vec_strir_p (vuc);
     VSTRIBR_P  VSTRIBR_PU
   signed int __builtin_vec_strir_p (vsc);
@@ -4131,11 +4131,8 @@
     VSUBEUQM  VSUBEUQM_VUQ
 
 ; TODO: Note that the entry for VEC_SUBEC currently gets ignored in
-; altivec_resolve_overloaded_builtin.  There are also forms for
-; vsi and vui arguments, but rather than building a define_expand
-; for the instruction sequence generated for those, we do some RTL
-; hackery.  Revisit whether we can remove that.  For now, keep this
-; much of the entry here to generate the #define, at least.
+; altivec_resolve_overloaded_builtin.  Revisit whether we can remove
+; that.  We still need to register the legal builtin forms here.
 [VEC_SUBEC, vec_subec, __builtin_vec_subec]
   vsq __builtin_vec_subec (vsq, vsq, vsq);
     VSUBECUQ  VSUBECUQ_VSQ
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 46bf7148b20..52f5ecc8d59 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -84,7 +84,7 @@ int main ()
 /* { dg-final { scan-assembler-times {\mlvx\M} 39 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
-/* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
+/* { dg-final { scan-assembler-times {\mlxv} 39 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times "lvewx" 1 } } */
 /* { dg-final { scan-assembler-times "lvxl" 1 } } */
 /* { dg-final { scan-assembler-times "vupklsh" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/cmpb-2.c b/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
index 113ab6a5f99..02b84d0731d 100644
--- a/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
@@ -8,7 +8,7 @@ void abort ();
 unsigned long long int
 do_compare (unsigned long long int a, unsigned long long int b)
 {
-  return __builtin_cmpb (a, b);	/* { dg-warning "implicit declaration of function '__builtin_cmpb'" } */
+  return __builtin_cmpb (a, b);	/* { dg-error "'__builtin_p6_cmpb' requires the '-mcpu=power6' option" } */
 }
 
 void
diff --git a/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c b/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
index 37b54745e0e..d4264ab6e7d 100644
--- a/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
@@ -7,7 +7,7 @@ void abort ();
 unsigned int
 do_compare (unsigned int a, unsigned int b)
 {
-  return __builtin_cmpb (a, b);  /* { dg-warning "implicit declaration of function '__builtin_cmpb'" } */
+  return __builtin_cmpb (a, b);  /* { dg-error "'__builtin_p6_cmpb_32' requires the '-mcpu=power6' option" } */
 }
 
 void
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
index 7daf30215b8..19a5d044c4d 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
@@ -11,7 +11,7 @@ test_eub_char ()
 {
   volatile vector unsigned char v0 = {1, 0, 0, 0, 0, 0, 0, 0};
   volatile vector unsigned char v1 = {0xff, 0, 0, 0, 0, 0, 0, 0};
-  vector unsigned short res = vec_vmuleub (v0, v1);
+  vector unsigned short res = vec_mule (v0, v1);
   if (res[0] != (unsigned short)v0[0] * (unsigned short)v1[0])
     __builtin_abort ();
 }
@@ -21,7 +21,7 @@ test_oub_char ()
 {
   volatile vector unsigned char v0 = {0, 1, 0, 0, 0, 0, 0, 0};
   volatile vector unsigned char v1 = {0, 0xff, 0, 0, 0, 0, 0, 0};
-  vector unsigned short res = vec_vmuloub (v0, v1);
+  vector unsigned short res = vec_mulo (v0, v1);
   if (res[0] != (unsigned short)v0[1] * (unsigned short)v1[1])
     __builtin_abort ();
 }
@@ -31,7 +31,7 @@ test_euh_short ()
 {
   volatile vector unsigned short v0 = {1, 0, 0, 0};
   volatile vector unsigned short v1 = {0xff, 0, 0, 0};
-  vector unsigned int res = vec_vmuleuh (v0, v1);
+  vector unsigned int res = vec_mule (v0, v1);
   if (res[0] != (unsigned int)v0[0] * (unsigned int)v1[0])
     __builtin_abort ();
 }
@@ -41,7 +41,7 @@ test_ouh_short ()
 {
   volatile vector unsigned short v0 = {0, 1, 0, 0};
   volatile vector unsigned short v1 = {0, 0xff, 0, 0};
-  vector unsigned int res = vec_vmulouh (v0, v1);
+  vector unsigned int res = vec_mulo (v0, v1);
   if (res[0] != (unsigned int)v0[1] * (unsigned int)v1[1])
     __builtin_abort ();
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
index ab396967c3d..3f22ba31862 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
@@ -18,7 +18,7 @@ vector float test_fc ()
 vector double testd_00 (vector double x) { return vec_splat (x, 0b00000); }
 vector double testd_01 (vector double x) { return vec_splat (x, 0b00001); }
 vector double test_dc ()
-{ const vector double y = { 3.0, 5.0 }; return vec_splat (y, 0b00010); }
+{ const vector double y = { 3.0, 5.0 }; return vec_splat (y, 0b00001); }
 
 /* If the source vector is a known constant, we will generate a load.  */
 /* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M} 2 } } */
@@ -27,5 +27,5 @@ vector double test_dc ()
 /* { dg-final { scan-assembler-times "vspltw|xxspltw" 3 } } */
 
 /* For double types, we will generate xxpermdi instructions.  */
-/* { dg-final { scan-assembler-times "xxpermdi" 3 } } */
+/* { dg-final { scan-assembler-times "xxpermdi" 2 } } */
 
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
index 4fa06c85ecc..9376f702a7a 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
@@ -9,23 +9,19 @@
 
 vector bool long long testb_00 (vector bool long long x) { return vec_splat (x, 0b00000); }
 vector bool long long testb_01 (vector bool long long x) { return vec_splat (x, 0b00001); }
-vector bool long long testb_02 (vector bool long long x) { return vec_splat (x, 0b00010); }
 
 vector signed long long tests_00 (vector signed long long x) { return vec_splat (x, 0b00000); }
 vector signed long long tests_01 (vector signed long long x) { return vec_splat (x, 0b00001); }
-vector signed long long tests_02 (vector signed long long x) { return vec_splat (x, 0b00010); }
 
 vector unsigned long long testu_00 (vector unsigned long long x) { return vec_splat (x, 0b00000); }
 vector unsigned long long testu_01 (vector unsigned long long x) { return vec_splat (x, 0b00001); }
-vector unsigned long long testu_02 (vector unsigned long long x) { return vec_splat (x, 0b00010); }
 
 /* Similar test as above, but the source vector is a known constant. */
-vector bool long long test_bll () { const vector bool long long y = {12, 23}; return vec_splat (y, 0b00010); }
-vector signed long long test_sll () { const vector signed long long y = {34, 45}; return vec_splat (y, 0b00010); }
-vector unsigned long long test_ull () { const vector unsigned long long y = {56, 67}; return vec_splat (y, 0b00010); }
+vector bool long long test_bll () { const vector bool long long y = {12, 23}; return vec_splat (y, 0b00001); }
+vector signed long long test_sll () { const vector signed long long y = {34, 45}; return vec_splat (y, 0b00001); }
 
 /* Assorted load instructions for the initialization with known constants. */
-/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M} 3 } } */
+/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M|\mxxspltib\M} 2 } } */
 
 /* xxpermdi for vec_splat of long long vectors.
  At the time of this writing, the number of xxpermdi instructions
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
index 20f5b05561e..263a1723d31 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
@@ -10,24 +10,24 @@
 vector signed short
 testss_1 (unsigned int ui)
 {
-  return vec_splat_s16 (ui);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s16 (ui);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned short
 testss_2 (signed int si)
 {
-  return vec_splat_u16 (si);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u16 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed char
 testsc_1 (unsigned int ui)
 {
-  return vec_splat_s8 (ui); /* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s8 (ui); /* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned char
 testsc_2 (signed int si)
 {
-  return vec_splat_u8 (si);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u8 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
index 102e1d1f813..0259e364aa6 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
@@ -27,11 +27,6 @@ v_sign sign_add_2 (v_sign a, v_sign b)
   return vec_add (a, b);
 }
 
-v_sign sign_add_3 (v_sign a, v_sign b)
-{
-  return vec_vaddudm (a, b);
-}
-
 v_sign sign_sub_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vsubudm (a, b);
@@ -43,11 +38,6 @@ v_sign sign_sub_2 (v_sign a, v_sign b)
 }
 
 
-v_sign sign_sub_3 (v_sign a, v_sign b)
-{
-  return vec_vsubudm (a, b);
-}
-
 v_sign sign_min_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vminsd (a, b);
@@ -58,11 +48,6 @@ v_sign sign_min_2 (v_sign a, v_sign b)
   return vec_min (a, b);
 }
 
-v_sign sign_min_3 (v_sign a, v_sign b)
-{
-  return vec_vminsd (a, b);
-}
-
 v_sign sign_max_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vmaxsd (a, b);
@@ -73,11 +58,6 @@ v_sign sign_max_2 (v_sign a, v_sign b)
   return vec_max (a, b);
 }
 
-v_sign sign_max_3 (v_sign a, v_sign b)
-{
-  return vec_vmaxsd (a, b);
-}
-
 v_sign sign_abs (v_sign a)
 {
   return vec_abs (a);		/* xor, vsubudm, vmaxsd.  */
@@ -98,41 +78,21 @@ v_uns uns_add_2 (v_uns a, v_uns b)
   return vec_add (a, b);
 }
 
-v_uns uns_add_3 (v_uns a, v_uns b)
-{
-  return vec_vaddudm (a, b);
-}
-
 v_uns uns_sub_2 (v_uns a, v_uns b)
 {
   return vec_sub (a, b);
 }
 
-v_uns uns_sub_3 (v_uns a, v_uns b)
-{
-  return vec_vsubudm (a, b);
-}
-
 v_uns uns_min_2 (v_uns a, v_uns b)
 {
   return vec_min (a, b);
 }
 
-v_uns uns_min_3 (v_uns a, v_uns b)
-{
-  return vec_vminud (a, b);
-}
-
 v_uns uns_max_2 (v_uns a, v_uns b)
 {
   return vec_max (a, b);
 }
 
-v_uns uns_max_3 (v_uns a, v_uns b)
-{
-  return vec_vmaxud (a, b);
-}
-
 v_bool uns_eq (v_uns a, v_uns b)
 {
   return vec_cmpeq (a, b);
@@ -168,21 +128,11 @@ v_sign sign_sl_2 (v_sign a, v_uns b)
   return vec_sl (a, b);
 }
 
-v_sign sign_sl_3 (v_sign a, v_uns b)
-{
-  return vec_vsld (a, b);
-}
-
 v_uns uns_sl_2 (v_uns a, v_uns b)
 {
   return vec_sl (a, b);
 }
 
-v_uns uns_sl_3 (v_uns a, v_uns b)
-{
-  return vec_vsld (a, b);
-}
-
 v_sign sign_sra_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vsrad (a, b);
@@ -193,11 +143,6 @@ v_sign sign_sra_2 (v_sign a, v_uns b)
   return vec_sra (a, b);
 }
 
-v_sign sign_sra_3 (v_sign a, v_uns b)
-{
-  return vec_vsrad (a, b);
-}
-
 v_bchar vbchar_eq (v_bchar a, v_bchar b)
 {
   return vec_cmpeq (a, b);
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
index 33304fe6132..ae6a3a8437b 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
@@ -37,11 +37,6 @@ vi_uns vi_pack_3 (vll_uns a, vll_uns b)
   return vec_pack (a, b);
 }
 
-vi_sign vi_pack_4 (vll_sign a, vll_sign b)
-{
-  return vec_vpkudum (a, b);
-}
-
 vs_sign vs_pack_1 (vi_sign a, vi_sign b)
 {
   return __builtin_altivec_vpkuwum (a, b);
@@ -52,11 +47,6 @@ vs_sign vs_pack_2 (vi_sign a, vi_sign b)
   return vec_pack (a, b);
 }
 
-vs_sign vs_pack_3 (vi_sign a, vi_sign b)
-{
-  return vec_vpkuwum (a, b);
-}
-
 vc_sign vc_pack_1 (vs_sign a, vs_sign b)
 {
   return __builtin_altivec_vpkuhum (a, b);
@@ -67,11 +57,6 @@ vc_sign vc_pack_2 (vs_sign a, vs_sign b)
   return vec_pack (a, b);
 }
 
-vc_sign vc_pack_3 (vs_sign a, vs_sign b)
-{
-  return vec_vpkuhum (a, b);
-}
-
 vll_sign vll_unpack_hi_1 (vi_sign a)
 {
   return __builtin_altivec_vupkhsw (a);
@@ -84,12 +69,7 @@ vll_sign vll_unpack_hi_2 (vi_sign a)
 
 vll_sign vll_unpack_hi_3 (vi_sign a)
 {
-  return __builtin_vec_vupkhsw (a);
-}
-
-vll_sign vll_unpack_lo_1 (vi_sign a)
-{
-  return vec_vupklsw (a);
+  return __builtin_altivec_vupkhsw (a);
 }
 
 vll_sign vll_unpack_lo_2 (vi_sign a)
@@ -97,11 +77,6 @@ vll_sign vll_unpack_lo_2 (vi_sign a)
   return vec_unpackl (a);
 }
 
-vll_sign vll_unpack_lo_3 (vi_sign a)
-{
-  return vec_vupklsw (a);
-}
-
 /* { dg-final { scan-assembler-times "vpkudum" 4 } } */
 /* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
 /* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
index 8329e2bae5a..2d2d141948f 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
@@ -28,22 +28,12 @@ vll_sign vll_clz_1 (vll_sign a)
 
 vll_sign vll_clz_2 (vll_sign a)
 {
-  return vec_vclz (a);
-}
-
-vll_sign vll_clz_3 (vll_sign a)
-{
-  return vec_vclzd (a);
+  return vec_cntlz (a);
 }
 
 vll_uns vll_clz_4 (vll_uns a)
 {
-  return vec_vclz (a);
-}
-
-vll_uns vll_clz_5 (vll_uns a)
-{
-  return vec_vclzd (a);
+  return vec_cntlz (a);
 }
 
 vi_sign vi_clz_1 (vi_sign a)
@@ -53,22 +43,12 @@ vi_sign vi_clz_1 (vi_sign a)
 
 vi_sign vi_clz_2 (vi_sign a)
 {
-  return vec_vclz (a);
-}
-
-vi_sign vi_clz_3 (vi_sign a)
-{
-  return vec_vclzw (a);
+  return vec_cntlz (a);
 }
 
 vi_uns vi_clz_4 (vi_uns a)
 {
-  return vec_vclz (a);
-}
-
-vi_uns vi_clz_5 (vi_uns a)
-{
-  return vec_vclzw (a);
+  return vec_cntlz (a);
 }
 
 vs_sign vs_clz_1 (vs_sign a)
@@ -78,22 +58,12 @@ vs_sign vs_clz_1 (vs_sign a)
 
 vs_sign vs_clz_2 (vs_sign a)
 {
-  return vec_vclz (a);
-}
-
-vs_sign vs_clz_3 (vs_sign a)
-{
-  return vec_vclzh (a);
+  return vec_cntlz (a);
 }
 
 vs_uns vs_clz_4 (vs_uns a)
 {
-  return vec_vclz (a);
-}
-
-vs_uns vs_clz_5 (vs_uns a)
-{
-  return vec_vclzh (a);
+  return vec_cntlz (a);
 }
 
 vc_sign vc_clz_1 (vc_sign a)
@@ -103,22 +73,12 @@ vc_sign vc_clz_1 (vc_sign a)
 
 vc_sign vc_clz_2 (vc_sign a)
 {
-  return vec_vclz (a);
-}
-
-vc_sign vc_clz_3 (vc_sign a)
-{
-  return vec_vclzb (a);
+  return vec_cntlz (a);
 }
 
 vc_uns vc_clz_4 (vc_uns a)
 {
-  return vec_vclz (a);
-}
-
-vc_uns vc_clz_5 (vc_uns a)
-{
-  return vec_vclzb (a);
+  return vec_cntlz (a);
 }
 
 vll_sign vll_popcnt_1 (vll_sign a)
@@ -126,24 +86,14 @@ vll_sign vll_popcnt_1 (vll_sign a)
   return __builtin_altivec_vpopcntd (a);
 }
 
-vll_sign vll_popcnt_2 (vll_sign a)
+vll_uns vll_popcnt_2 (vll_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vll_sign vll_popcnt_3 (vll_sign a)
-{
-  return vec_vpopcntd (a);
+  return vec_popcnt (a);
 }
 
 vll_uns vll_popcnt_4 (vll_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vll_uns vll_popcnt_5 (vll_uns a)
-{
-  return vec_vpopcntd (a);
+  return vec_popcnt (a);
 }
 
 vi_sign vi_popcnt_1 (vi_sign a)
@@ -151,24 +101,14 @@ vi_sign vi_popcnt_1 (vi_sign a)
   return __builtin_altivec_vpopcntw (a);
 }
 
-vi_sign vi_popcnt_2 (vi_sign a)
+vi_uns vi_popcnt_2 (vi_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vi_sign vi_popcnt_3 (vi_sign a)
-{
-  return vec_vpopcntw (a);
+  return vec_popcnt (a);
 }
 
 vi_uns vi_popcnt_4 (vi_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vi_uns vi_popcnt_5 (vi_uns a)
-{
-  return vec_vpopcntw (a);
+  return vec_popcnt (a);
 }
 
 vs_sign vs_popcnt_1 (vs_sign a)
@@ -176,24 +116,14 @@ vs_sign vs_popcnt_1 (vs_sign a)
   return __builtin_altivec_vpopcnth (a);
 }
 
-vs_sign vs_popcnt_2 (vs_sign a)
+vs_uns vs_popcnt_2 (vs_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vs_sign vs_popcnt_3 (vs_sign a)
-{
-  return vec_vpopcnth (a);
+  return vec_popcnt (a);
 }
 
 vs_uns vs_popcnt_4 (vs_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vs_uns vs_popcnt_5 (vs_uns a)
-{
-  return vec_vpopcnth (a);
+  return vec_popcnt (a);
 }
 
 vc_sign vc_popcnt_1 (vc_sign a)
@@ -201,24 +131,14 @@ vc_sign vc_popcnt_1 (vc_sign a)
   return __builtin_altivec_vpopcntb (a);
 }
 
-vc_sign vc_popcnt_2 (vc_sign a)
+vc_uns vc_popcnt_2 (vc_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vc_sign vc_popcnt_3 (vc_sign a)
-{
-  return vec_vpopcntb (a);
+  return vec_popcnt (a);
 }
 
 vc_uns vc_popcnt_4 (vc_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vc_uns vc_popcnt_5 (vc_uns a)
-{
-  return vec_vpopcntb (a);
+  return vec_popcnt (a);
 }
 
 vc_uns vc_gbb_1 (vc_uns a)
@@ -228,12 +148,12 @@ vc_uns vc_gbb_1 (vc_uns a)
 
 vc_sign vc_gbb_2 (vc_sign a)
 {
-  return vec_vgbbd (a);
+  return vec_gb (a);
 }
 
 vc_uns vc_gbb_3 (vc_uns a)
 {
-  return vec_vgbbd (a);
+  return vec_gb (a);
 }
 
 /* { dg-final { scan-assembler-times "vclzd" 	5 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
index fcfac7c50b1..f3035000fe7 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
@@ -10,22 +10,22 @@ typedef vector unsigned int	v_uns;
 
 v_sign even_sign (v_sign a, v_sign b)
 {
-  return vec_vmrgew (a, b);
+  return vec_mergee (a, b);
 }
 
 v_uns even_uns (v_uns a, v_uns b)
 {
-  return vec_vmrgew (a, b);
+  return vec_mergee (a, b);
 }
 
 v_sign odd_sign (v_sign a, v_sign b)
 {
-  return vec_vmrgow (a, b);
+  return vec_mergeo (a, b);
 }
 
 v_uns odd_uns (v_uns a, v_uns b)
 {
-  return vec_vmrgow (a, b);
+  return vec_mergeo (a, b);
 }
 
 /* { dg-final { scan-assembler-times "vmrgew" 2 } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:2edd7484b836aecb6cb3c7796e74864727749330

commit 2edd7484b836aecb6cb3c7796e74864727749330
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 13 15:47:32 2021 -0600

    rs6000: More bug fixes
    
    2021-01-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Fix thinko.
            * config/rs6000/rs6000-call.c (rs6000_invalid_new_builtin): Handle
            ENB_P10_64.
            (rs6000_new_builtin_is_supported_p): Likewise.
            (rs6000_expand_new_builtin): Likewise.
            (rs6000_init_builtins): Likewise.
            * config/rs6000/rs6000-gen-builtins.c (write_defines_file):
            Define _ARCH_PPC64_PWR9 when appropriate.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-7.c: Remove vec_lvx call and adjust
            counts.
            * gcc.target/powerpc/ctz-4.c: Don't use deprecated builtins.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def     | 26 ++++-----
 gcc/config/rs6000/rs6000-c.c                 |  2 +-
 gcc/config/rs6000/rs6000-call.c              | 14 +++++
 gcc/config/rs6000/rs6000-gen-builtins.c      |  3 +
 gcc/config/rs6000/rs6000-overload.def        | 84 ++++++++++++----------------
 gcc/testsuite/gcc.target/powerpc/altivec-7.c |  5 +-
 gcc/testsuite/gcc.target/powerpc/ctz-4.c     | 64 +++------------------
 7 files changed, 76 insertions(+), 122 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 68d1a7d361a..9c4470bf400 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1087,28 +1087,28 @@
 
 ; Cell builtins.
 [cell]
-  pure vuc __builtin_altivec_lvlx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvlx (signed long long, const void *);
     LVLX altivec_lvlx {ldvec}
 
-  pure vuc __builtin_altivec_lvlxl (signed long long, const void *);
+  pure vsc __builtin_altivec_lvlxl (signed long long, const void *);
     LVLXL altivec_lvlxl {ldvec}
 
-  pure vuc __builtin_altivec_lvrx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvrx (signed long long, const void *);
     LVRX altivec_lvrx {ldvec}
 
-  pure vuc __builtin_altivec_lvrxl (signed long long, const void *);
+  pure vsc __builtin_altivec_lvrxl (signed long long, const void *);
     LVRXL altivec_lvrxl {ldvec}
 
-  void __builtin_altivec_stvlx (vuc, signed long long, void *);
+  void __builtin_altivec_stvlx (vsc, signed long long, void *);
     STVLX altivec_stvlx {stvec}
 
-  void __builtin_altivec_stvlxl (vuc, signed long long, void *);
+  void __builtin_altivec_stvlxl (vsc, signed long long, void *);
     STVLXL altivec_stvlxl {stvec}
 
-  void __builtin_altivec_stvrx (vuc, signed long long, void *);
+  void __builtin_altivec_stvrx (vsc, signed long long, void *);
     STVRX altivec_stvrx {stvec}
 
-  void __builtin_altivec_stvrxl (vuc, signed long long, void *);
+  void __builtin_altivec_stvrxl (vsc, signed long long, void *);
     STVRXL altivec_stvrxl {stvec}
 
 
@@ -2681,10 +2681,10 @@
   const vuc __builtin_altivec_vsrv (vuc, vuc);
     VSRV vsrv {}
 
-  const signed int __builtin_scalar_byte_in_range (unsigned char, unsigned int);
+  const signed int __builtin_scalar_byte_in_range (unsigned int, unsigned int);
     CMPRB cmprb {}
 
-  const signed int __builtin_scalar_byte_in_either_range (unsigned char, unsigned int);
+  const signed int __builtin_scalar_byte_in_either_range (unsigned int, unsigned int);
     CMPRB2 cmprb2 {}
 
   const vull __builtin_vsx_extract4b (vuc, const int[0,12]);
@@ -2825,7 +2825,7 @@
   void __builtin_altivec_stxvl (vuc, void *, long long);
     STXVL stxvl {}
 
-  const signed int __builtin_scalar_byte_in_set (unsigned char, unsigned long long);
+  const signed int __builtin_scalar_byte_in_set (unsigned int, unsigned long long);
     CMPEQB cmpeqb {}
 
   pure vuc __builtin_vsx_lxvl (const void *, unsigned long long);
@@ -2904,10 +2904,10 @@
 
 ; Decimal floating-point builtins.
 [dfp]
-  const _Decimal64 __builtin_ddedpd (const int<0,2>, _Decimal64);
+  const _Decimal64 __builtin_ddedpd (const int<2>, _Decimal64);
     DDEDPD dfp_ddedpd_dd {}
 
-  const _Decimal128 __builtin_ddedpdq (const int<0,2>, _Decimal128);
+  const _Decimal128 __builtin_ddedpdq (const int<2>, _Decimal128);
     DDEDPDQ dfp_ddedpd_td {}
 
   const _Decimal64 __builtin_denbcd (const int<1>, _Decimal64);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 15caa86e20c..a3fe6f2abc9 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2844,7 +2844,7 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	gcc_assert (instance != NULL);
 	tree fntype = rs6000_builtin_info_x[instance->bifid].fntype;
 	tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
-	tree parmtype1 = TREE_VALUE (TREE_CHAIN (parmtype0));
+	tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
 
 	if (rs6000_new_builtin_type_compatible (types[0], parmtype0)
 	    && rs6000_new_builtin_type_compatible (types[1], parmtype1))
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 8177035ac8c..eff580b3fa0 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -11818,6 +11818,10 @@ rs6000_invalid_new_builtin (enum rs6000_gen_builtins fncode)
     case ENB_P10:
       error ("%qs requires the %qs option", name, "-mcpu=power10");
       break;
+    case ENB_P10_64:
+      error ("%qs requires the %qs option and either the %qs or %qs option",
+	     name, "-mcpu=power10", "-m64", "-mpowerpc64");
+      break;
     case ENB_MMA:
       error ("%qs requires the %qs option", name, "-mmma");
       break;
@@ -14092,6 +14096,10 @@ rs6000_new_builtin_is_supported_p (enum rs6000_gen_builtins fncode)
       if (!TARGET_POWER10)
 	return false;
       break;
+    case ENB_P10_64:
+      if (!TARGET_POWER10 || !TARGET_POWERPC64)
+	return false;
+      break;
     case ENB_MMA:
       if (!TARGET_MMA)
 	return false;
@@ -15351,6 +15359,10 @@ rs6000_expand_new_builtin (tree exp, rtx target,
       if (!TARGET_POWER10)
 	return const0_rtx;
       break;
+    case ENB_P10_64:
+      if (!TARGET_POWER10 || !TARGET_POWERPC64)
+	return const0_rtx;
+      break;
     case ENB_MMA:
       if (!TARGET_MMA)
 	return const0_rtx;
@@ -16000,6 +16012,8 @@ rs6000_init_builtins (void)
 	    continue;
 	  if (e == ENB_P10 && !TARGET_POWER10)
 	    continue;
+	  if (e == ENB_P10_64 && (!TARGET_POWER10 || !TARGET_POWERPC64))
+	    continue;
 	  if (e == ENB_MMA && !TARGET_MMA)
 	    continue;
 	  tree fntype = rs6000_builtin_info_x[i].fntype;
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 8f129f47d8c..b75b29303dd 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -2768,6 +2768,9 @@ write_defines_file ()
 {
   fprintf (defines_file, "#ifndef _RS6000_VECDEFINES_H\n");
   fprintf (defines_file, "#define _RS6000_VECDEFINES_H 1\n\n");
+  fprintf (defines_file, "#if defined(_ARCH_PPC64) && defined (_ARCH_PWR9)\n");
+  fprintf (defines_file, "  #define _ARCH_PPC64_PWR9 1\n");
+  fprintf (defines_file, "#endif\n\n");
   for (int i = 0; i < num_ovld_stanzas; i++)
     if (strcmp (ovld_stanzas[i].extern_name, "SKIP"))
       {
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index ec884b63388..e80e163f8ec 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -730,7 +730,7 @@
     VCMPEQUD_P  VCMPEQUD_P_SB
 
 [VEC_CMPEQB, SKIP, __builtin_byte_in_set]
-  signed int __builtin_byte_in_set (unsigned char,  unsigned long long);
+  signed int __builtin_byte_in_set (unsigned int,  unsigned long long);
     CMPEQB
 
 ; #### XVCMPGESP{TARGET_VSX};VCMPGEFP
@@ -738,19 +738,19 @@
   vbc __builtin_vec_cmpge (vsc, vsc);
     CMPGE_16QI  CMPGE_16QI_VSC
   vbc __builtin_vec_cmpge (vuc, vuc);
-    CMPGE_16QI  CMPGE_16QI_VUC
+    CMPGE_U16QI  CMPGE_16QI_VUC
   vbs __builtin_vec_cmpge (vss, vss);
     CMPGE_8HI  CMPGE_8HI_VSS
   vbs __builtin_vec_cmpge (vus, vus);
-    CMPGE_8HI  CMPGE_8HI_VUS
+    CMPGE_U8HI  CMPGE_8HI_VUS
   vbi __builtin_vec_cmpge (vsi, vsi);
     CMPGE_4SI  CMPGE_4SI_VSI
   vbi __builtin_vec_cmpge (vui, vui);
-    CMPGE_4SI  CMPGE_4SI_VUI
+    CMPGE_U4SI  CMPGE_4SI_VUI
   vbll __builtin_vec_cmpge (vsll, vsll);
     CMPGE_2DI  CMPGE_2DI_VSLL
   vbll __builtin_vec_cmpge (vull, vull);
-    CMPGE_2DI  CMPGE_2DI_VULL
+    CMPGE_U2DI  CMPGE_2DI_VULL
   vbi __builtin_vec_cmpge (vf, vf);
     VCMPGEFP
   vbll __builtin_vec_cmpge (vd, vd);
@@ -1021,11 +1021,11 @@
     VCMPNEZW_P  VCMPNEZW_VUI_P
 
 [VEC_CMPRB, SKIP, __builtin_byte_in_range]
-  signed int __builtin_byte_in_range (unsigned char,  unsigned int);
+  signed int __builtin_byte_in_range (unsigned int, unsigned int);
     CMPRB
 
 [VEC_CMPRB2, SKIP, __builtin_byte_in_either_range]
-  signed int __builtin_byte_in_range (unsigned char,  unsigned int);
+  signed int __builtin_byte_in_range (unsigned int, unsigned int);
     CMPRB2
 
 [VEC_CNTLZ, vec_cntlz, __builtin_vec_vclz, _ARCH_PWR8]
@@ -4640,6 +4640,10 @@
     STXVD2X_V2DI  STXVD2X_ULL
   void __builtin_vec_vsx_st (vbll, signed long long, vbll *);
     STXVD2X_V2DI  STXVD2X_VBLL
+  void __builtin_vec_vsx_st (vsq, signed long long, signed __int128 *);
+    STXVD2X_V1TI  STXVD2X_SQ
+  void __builtin_vec_vsx_st (vuq, signed long long, unsigned __int128 *);
+    STXVD2X_V1TI  STXVD2X_UQ
   void __builtin_vec_vsx_st (vf, signed long long, vf *);
     STXVW4X_V4SF  STXVW4X_VF
   void __builtin_vec_vsx_st (vf, signed long long, float *);
@@ -4651,67 +4655,49 @@
 
 [VEC_XST_BE, vec_xst_be, __builtin_vec_xst_be, __VSX__]
   void __builtin_vec_xst_be (vsc, signed long long, vsc *);
-    STXVW4X_V16QI  STXVW4X_VSC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_VSC
   void __builtin_vec_xst_be (vsc, signed long long, signed char *);
-    STXVW4X_V16QI  STXVW4X_SC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_SC_
   void __builtin_vec_xst_be (vuc, signed long long, vuc *);
-    STXVW4X_V16QI  STXVW4X_VUC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_VUC
   void __builtin_vec_xst_be (vuc, signed long long, unsigned char *);
-    STXVW4X_V16QI  STXVW4X_UC_BE
-  void __builtin_vec_xst_be (vbc, signed long long, vbc *);
-    STXVW4X_V16QI  STXVW4X_VBC_BE
-  void __builtin_vec_xst_be (vbc, signed long long, signed char *);
-    STXVW4X_V16QI  STXVW4X_VBC_S_BE
-  void __builtin_vec_xst_be (vbc, signed long long, unsigned char *);
-    STXVW4X_V16QI  STXVW4X_VBC_U_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_UC
   void __builtin_vec_xst_be (vss, signed long long, vss *);
-    STXVW4X_V8HI  STXVW4X_VSS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_VSS
   void __builtin_vec_xst_be (vss, signed long long, signed short *);
-    STXVW4X_V8HI  STXVW4X_SS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_SS
   void __builtin_vec_xst_be (vus, signed long long, vus *);
-    STXVW4X_V8HI  STXVW4X_VUS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_VUS
   void __builtin_vec_xst_be (vus, signed long long, unsigned short *);
-    STXVW4X_V8HI  STXVW4X_US_BE
-  void __builtin_vec_xst_be (vbs, signed long long, vbs *);
-    STXVW4X_V8HI  STXVW4X_VBS_BE
-  void __builtin_vec_xst_be (vbs, signed long long, signed short *);
-    STXVW4X_V8HI  STXVW4X_VBS_S_BE
-  void __builtin_vec_xst_be (vbs, signed long long, unsigned short *);
-    STXVW4X_V8HI  STXVW4X_VBS_U_BE
-  void __builtin_vec_xst_be (vp, signed long long, vp *);
-    STXVW4X_V8HI  STXVW4X_VP_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_US
   void __builtin_vec_xst_be (vsi, signed long long, vsi *);
-    STXVW4X_V4SI  STXVW4X_VSI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_VSI
   void __builtin_vec_xst_be (vsi, signed long long, signed int *);
-    STXVW4X_V4SI  STXVW4X_SI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_SI
   void __builtin_vec_xst_be (vui, signed long long, vui *);
-    STXVW4X_V4SI  STXVW4X_VUI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_VUI
   void __builtin_vec_xst_be (vui, signed long long, unsigned int *);
-    STXVW4X_V4SI  STXVW4X_UI_BE
-  void __builtin_vec_xst_be (vbi, signed long long, vbi *);
-    STXVW4X_V4SI  STXVW4X_VBI_BE
-  void __builtin_vec_xst_be (vbi, signed long long, signed int *);
-    STXVW4X_V4SI  STXVW4X_VBI_S_BE
-  void __builtin_vec_xst_be (vbi, signed long long, unsigned int *);
-    STXVW4X_V4SI  STXVW4X_VBI_U_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_UI
   void __builtin_vec_xst_be (vsll, signed long long, vsll *);
-    STXVD2X_V2DI  STXVD2X_VSLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_VSLL
   void __builtin_vec_xst_be (vsll, signed long long, signed long long *);
-    STXVD2X_V2DI  STXVD2X_SLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_SLL
   void __builtin_vec_xst_be (vull, signed long long, vull *);
-    STXVD2X_V2DI  STXVD2X_VULL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_VULL
   void __builtin_vec_xst_be (vull, signed long long, unsigned long long *);
-    STXVD2X_V2DI  STXVD2X_ULL_BE
-  void __builtin_vec_xst_be (vbll, signed long long, vbll *);
-    STXVD2X_V2DI  STXVD2X_VBLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_ULL
+  void __builtin_vec_xst_be (vsq, signed long long, signed __int128 *);
+    ST_ELEMREV_V1TI  ST_ELEMREV_SQ
+  void __builtin_vec_xst_be (vuq, signed long long, unsigned __int128 *);
+    ST_ELEMREV_V1TI  ST_ELEMREV_UQ
   void __builtin_vec_xst_be (vf, signed long long, vf *);
-    STXVW4X_V4SF  STXVW4X_VF_BE
+    ST_ELEMREV_V4SF  ST_ELEMREV_VF
   void __builtin_vec_xst_be (vf, signed long long, float *);
-    STXVW4X_V4SF  STXVW4X_F_BE
+    ST_ELEMREV_V4SF  ST_ELEMREV_F
   void __builtin_vec_xst_be (vd, signed long long, vd *);
-    STXVD2X_V2DF  STXVD2X_VD_BE
+    ST_ELEMREV_V2DF  ST_ELEMREV_VD
   void __builtin_vec_xst_be (vd, signed long long, double *);
-    STXVD2X_V2DF  STXVD2X_D_BE
+    ST_ELEMREV_V2DF  ST_ELEMREV_D
 
 [VEC_XST_LEN_R, vec_xst_len_r, __builtin_vec_xst_len_r, _ARCH_PPC64_PWR9]
   void __builtin_vsx_xst_len_r (vuc, unsigned char *, unsigned long long);
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 0cef426fcd9..46bf7148b20 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -41,7 +41,6 @@ int main ()
   *vecushort++ = vec_xor((vector bool short)vecshort[0], vecushort[1]);
   *vecushort++ = vec_xor(vecushort[0], (vector bool short)vecshort[1]);
   *vecuint++ = vec_ld(var_int[0], uintp[1]);
-  *vecuint++ = vec_lvx(var_int[0], uintp[1]);
   *vecuint++ = vec_msum(vecuchar[0], vecuchar[1], vecuint[2]);
   *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]);
 
@@ -79,10 +78,10 @@ int main ()
      vec_ld                         lvx
 */
 
-/* { dg-final { scan-assembler-times "vpkpx" 2 } } */
+/* { dg-final { scan-assembler-times "vpkpx" 1 } } */
 /* { dg-final { scan-assembler-times "vmulesb" 1 } } */
 /* { dg-final { scan-assembler-times "vmulosb" 1 } } */
-/* { dg-final { scan-assembler-times {\mlvx\M} 42 { target { ! powerpc_vsx } } } } */
+/* { dg-final { scan-assembler-times {\mlvx\M} 39 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/ctz-4.c b/gcc/testsuite/gcc.target/powerpc/ctz-4.c
index 74d305a8fbc..8e5f7699a63 100644
--- a/gcc/testsuite/gcc.target/powerpc/ctz-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/ctz-4.c
@@ -8,97 +8,49 @@
 vector signed char
 count_trailing_zeros_v16qi_1s (vector signed char a)
 {
-  return vec_vctz (a);
-}
-
-vector signed char
-count_trailing_zeros_v16qi_2s (vector signed char a)
-{
-  return vec_vctzb (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned char
 count_trailing_zeros_v16qi_1u (vector unsigned char a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned char
-count_trailing_zeros_v16qi_2u (vector unsigned char a)
-{
-  return vec_vctzb (a);
+  return vec_cnttz (a);
 }
 
 vector short
 count_trailing_zeros_v8hi_1s (vector short a)
 {
-  return vec_vctz (a);
-}
-
-vector short
-count_trailing_zeros_v8hi_2s (vector short a)
-{
-  return vec_vctzh (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned short
 count_trailing_zeros_v8hi_1u (vector unsigned short a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned short
-count_trailing_zeros_v8hi_2u (vector unsigned short a)
-{
-  return vec_vctzh (a);
+  return vec_cnttz (a);
 }
 
 vector int
 count_trailing_zeros_v4si_1s (vector int a)
 {
-  return vec_vctz (a);
-}
-
-vector int
-count_trailing_zeros_v4si_2s (vector int a)
-{
-  return vec_vctzw (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned int
 count_trailing_zeros_v4si_1u (vector unsigned int a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned int
-count_trailing_zeros_v4si_2u (vector unsigned int a)
-{
-  return vec_vctzw (a);
+  return vec_cnttz (a);
 }
 
 vector long long
 count_trailing_zeros_v2di_1s (vector long long a)
 {
-  return vec_vctz (a);
-}
-
-vector long long
-count_trailing_zeros_v2di_2s (vector long long a)
-{
-  return vec_vctzd (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned long long
 count_trailing_zeros_v2di_1u (vector unsigned long long a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned long long
-count_trailing_zeros_v2di_2u (vector unsigned long long a)
-{
-  return vec_vctzd (a);
+  return vec_cnttz (a);
 }
 
 /* { dg-final { scan-assembler "vctzb" } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:cf4773483057eb136922d6e0a6e27dc644a76dbb

commit cf4773483057eb136922d6e0a6e27dc644a76dbb
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 13 08:58:23 2021 -0600

    rs6000: More bug fixes
    
    2021-01-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Remove incorrect
            gcc_assert.
            * config/rs6000/rs6000-call.c (rs6000_init_builtins): Fix
            initialization of ptr_intTI_type_node and ptr_uintTI_type_node.
            * config/rs6000/rs6000-gen-builtins.c (typeinfo): Remove isopaque.
            (match_type): Remove vop handling.
            (construct_fntype_id): Remove isopaque handling.
            (parse_ovld_entry): Commentary update.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.dg/vmx/ops.c: Remove deprecated calls.
            * gcc.target/powerpc/altivec-7.c: Likewise.
            * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Adjust.
            * gcc.target/powerpc/builtins-3-p9-runnable.c: Adjust.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def           | 173 ++++++++++-----------
 gcc/config/rs6000/rs6000-c.c                       |   1 -
 gcc/config/rs6000/rs6000-call.c                    |   5 +-
 gcc/config/rs6000/rs6000-gen-builtins.c            |  49 ++----
 gcc/config/rs6000/rs6000-overload.def              |  47 +++---
 gcc/testsuite/gcc.dg/vmx/ops.c                     |  86 ----------
 gcc/testsuite/gcc.target/powerpc/altivec-7.c       |  29 ++--
 .../gcc.target/powerpc/bfp/scalar-test-neg-2.c     |   2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-3.c     |   2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-5.c     |   2 +-
 .../gcc.target/powerpc/builtins-3-p9-runnable.c    |   8 +-
 11 files changed, 139 insertions(+), 265 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 6fa121bb38d..68d1a7d361a 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -81,7 +81,6 @@
 ;   vp		vector pixel
 ;   vf		vector float
 ;   vd		vector double
-;   vop		opaque vector (matches all vectors)
 ;
 ; For simplicity, We don't support "short int" and "long long int".
 ; We don't currently support a <basetype> of "bool", "long double",
@@ -127,30 +126,20 @@
 ;
 ; It is important to note that each entry's <bif-name> must be
 ; unique.  The code generated from this file will call def_builtin
-; for each entry, and this can only happen once per name.  This
-; means that in some cases we currently retain some tricks from
-; the old builtin support to aid with overloading.  This 
-; unfortunately seems to be necessary for backward compatibility.
+; for each entry, and this can only happen once per name.
 ;
-; The two tricks at our disposal are the void pointer and the "vop"
-; vector type.  We use void pointers anywhere that pointer types
-; are accepted (primarily for vector load/store built-ins).  In
-; practice this means that we accept pointers to anything, not
-; just to the types that we intend.  We use the "vop" vector type
-; anytime that a built-in must accept vector types that have
-; different modes.  This is an opaque type that will match any
-; vector type, which may mean matching vector types that we don't
-; intend.
+; The type signature for the builtin must match the modes of the RTL
+; pattern <bif-pattern>.  When a builtin is used only as a basis for
+; overloading, you can use an arbitrary type for each mode (for example,
+; for V8HImode, you could use vp, vss, vus, or vbs).  The overloading
+; machinery takes care of adding appropriate casts between vectors to
+; satisfy impedance matching.  The overloaded prototypes are the ones
+; that must match what users expect.  Thus you will often have a small
+; number of entries in this file that correspond to a much greater
+; number of entries in rs6000-overload.def.
 ;
-; We can improve on "vop" when a vector argument or return type is
-; limited to one mode.  For example, "vsll" and "vull" both map to
-; V2DImode.  In this case, we can arbitrarily pick one of the
-; acceptable types to use in the prototype.  The signature used by
-; def_builtin is based on modes, not types, so this works well.
-; Only use "vop" when there is no alternative.  When there is a
-; choice, best practice is to use the signed type ("vsll" in the
-; example above) unless the choices are unsigned and bool, in
-; which case the unsigned type should be used.
+; However, builtins in this file that are expected to be directly called
+; by users must have one version for each expected type combination.
 ;
 ; Eventually we want to automatically generate built-in documentation
 ; from the entries in this file.  Documenting of built-ins with more
@@ -354,12 +343,24 @@
   vuc __builtin_altivec_mask_for_load (const void *);
     MASK_FOR_LOAD altivec_lvsr_direct {ldstmask}
 
-  vus __builtin_altivec_mfvscr ();
+  vss __builtin_altivec_mfvscr ();
     MFVSCR altivec_mfvscr {}
 
-  void __builtin_altivec_mtvscr (vop);
+  void __builtin_altivec_mtvscr (vsi);
     MTVSCR altivec_mtvscr {}
 
+  const vsll __builtin_altivec_vmulesw (vsi, vsi);
+    VMULESW vec_widen_smult_even_v4si {}
+
+  const vull __builtin_altivec_vmuleuw (vui, vui);
+    VMULEUW vec_widen_umult_even_v4si {}
+
+  const vsll __builtin_altivec_vmulosw (vsi, vsi);
+    VMULOSW vec_widen_smult_odd_v4si {}
+
+  const vull __builtin_altivec_vmulouw (vui, vui);
+    VMULOUW vec_widen_umult_odd_v4si {}
+
   const vsc __builtin_altivec_nabs_v16qi (vsc);
     NABS_V16QI nabsv16qi2 {}
 
@@ -441,7 +442,7 @@
   const vus __builtin_altivec_vadduhs (vus, vus);
     VADDUHS altivec_vadduhs {}
 
-  const vui __builtin_altivec_vadduwm (vui, vui);
+  const vsi __builtin_altivec_vadduwm (vsi, vsi);
     VADDUWM addv4si3 {}
 
   const vui __builtin_altivec_vadduws (vui, vui);
@@ -528,19 +529,19 @@
   const vsc __builtin_altivec_vcmpequb (vuc, vuc);
     VCMPEQUB vector_eqv16qi {}
 
-  const int __builtin_altivec_vcmpequb_p (int, vuc, vuc);
+  const int __builtin_altivec_vcmpequb_p (int, vsc, vsc);
     VCMPEQUB_P vector_eq_v16qi_p {pred}
 
   const vss __builtin_altivec_vcmpequh (vus, vus);
     VCMPEQUH vector_eqv8hi {}
 
-  const int __builtin_altivec_vcmpequh_p (int, vus, vus);
+  const int __builtin_altivec_vcmpequh_p (int, vss, vss);
     VCMPEQUH_P vector_eq_v8hi_p {pred}
 
   const vsi __builtin_altivec_vcmpequw (vui, vui);
     VCMPEQUW vector_eqv4si {}
 
-  const int __builtin_altivec_vcmpequw_p (int, vui, vui);
+  const int __builtin_altivec_vcmpequw_p (int, vsi, vsi);
     VCMPEQUW_P vector_eq_v4si_p {pred}
 
   const vf __builtin_altivec_vcmpgefp (vf, vf);
@@ -576,19 +577,19 @@
   const vsc __builtin_altivec_vcmpgtub (vuc, vuc);
     VCMPGTUB vector_gtuv16qi {}
 
-  const int __builtin_altivec_vcmpgtub_p (int, vuc, vuc);
+  const int __builtin_altivec_vcmpgtub_p (int, vsc, vsc);
     VCMPGTUB_P vector_gtu_v16qi_p {pred}
 
   const vss __builtin_altivec_vcmpgtuh (vus, vus);
     VCMPGTUH vector_gtuv8hi {}
 
-  const int __builtin_altivec_vcmpgtuh_p (int, vus, vus);
+  const int __builtin_altivec_vcmpgtuh_p (int, vss, vss);
     VCMPGTUH_P vector_gtu_v8hi_p {pred}
 
   const vsi __builtin_altivec_vcmpgtuw (vui, vui);
     VCMPGTUW vector_gtuv4si {}
 
-  const int __builtin_altivec_vcmpgtuw_p (int, vui, vui);
+  const int __builtin_altivec_vcmpgtuw_p (int, vsi, vsi);
     VCMPGTUW_P vector_gtu_v4si_p {pred}
 
   const vsi __builtin_altivec_vctsxs (vf, const int<5>);
@@ -873,7 +874,7 @@
   const vuq __builtin_altivec_vsel_1ti_uns (vuq, vuq, vuq);
     VSEL_1TI_UNS vector_select_v1ti_uns {}
 
-  const vf __builtin_altivec_vsel_4sf (vf, vf, vui);
+  const vf __builtin_altivec_vsel_4sf (vf, vf, vf);
     VSEL_4SF vector_select_v4sf {}
 
   const vsi __builtin_altivec_vsel_4si (vsi, vsi, vui);
@@ -888,7 +889,7 @@
   const vus __builtin_altivec_vsel_8hi_uns (vus, vus, vus);
     VSEL_8HI_UNS vector_select_v8hi_uns {}
 
-  const vop __builtin_altivec_vsl (vop, vuc);
+  const vsi __builtin_altivec_vsl (vsi, vsi);
     VSL altivec_vsl {}
 
   const vsc __builtin_altivec_vslb (vsc, vuc);
@@ -909,7 +910,7 @@
   const vss __builtin_altivec_vslh (vss, vus);
     VSLH vashlv8hi3 {}
 
-  const vop __builtin_altivec_vslo (vop, vuc);
+  const vsi __builtin_altivec_vslo (vsi, vsi);
     VSLO altivec_vslo {}
 
   const vsi __builtin_altivec_vslw (vsi, vui);
@@ -933,7 +934,7 @@
   const vsi __builtin_altivec_vspltw (vsi, const int<2>);
     VSPLTW altivec_vspltw {}
 
-  const vop __builtin_altivec_vsr (vop, vop);
+  const vsi __builtin_altivec_vsr (vsi, vsi);
     VSR altivec_vsr {}
 
   const vsc __builtin_altivec_vsrab (vsc, vuc);
@@ -951,7 +952,7 @@
   const vss __builtin_altivec_vsrh (vss, vus);
     VSRH vlshrv8hi3 {}
 
-  const vop __builtin_altivec_vsro (vop, vop);
+  const vsi __builtin_altivec_vsro (vsi, vsi);
     VSRO altivec_vsro {}
 
   const vsi __builtin_altivec_vsrw (vsi, vui);
@@ -1086,28 +1087,28 @@
 
 ; Cell builtins.
 [cell]
-  pure vop __builtin_altivec_lvlx (signed long long, const void *);
+  pure vuc __builtin_altivec_lvlx (signed long long, const void *);
     LVLX altivec_lvlx {ldvec}
 
-  pure vop __builtin_altivec_lvlxl (signed long long, const void *);
+  pure vuc __builtin_altivec_lvlxl (signed long long, const void *);
     LVLXL altivec_lvlxl {ldvec}
 
-  pure vop __builtin_altivec_lvrx (signed long long, const void *);
+  pure vuc __builtin_altivec_lvrx (signed long long, const void *);
     LVRX altivec_lvrx {ldvec}
 
-  pure vop __builtin_altivec_lvrxl (signed long long, const void *);
+  pure vuc __builtin_altivec_lvrxl (signed long long, const void *);
     LVRXL altivec_lvrxl {ldvec}
 
-  void __builtin_altivec_stvlx (vop, signed long long, void *);
+  void __builtin_altivec_stvlx (vuc, signed long long, void *);
     STVLX altivec_stvlx {stvec}
 
-  void __builtin_altivec_stvlxl (vop, signed long long, void *);
+  void __builtin_altivec_stvlxl (vuc, signed long long, void *);
     STVLXL altivec_stvlxl {stvec}
 
-  void __builtin_altivec_stvrx (vop, signed long long, void *);
+  void __builtin_altivec_stvrx (vuc, signed long long, void *);
     STVRX altivec_stvrx {stvec}
 
-  void __builtin_altivec_stvrxl (vop, signed long long, void *);
+  void __builtin_altivec_stvrxl (vuc, signed long long, void *);
     STVRXL altivec_stvrxl {stvec}
 
 
@@ -1167,6 +1168,24 @@
   const vull __builtin_altivec_vandc_v2di_uns (vull, vull);
     VANDC_V2DI_UNS andcv2di3 {}
 
+  const vbll __builtin_altivec_vcmpequd (vull, vull);
+    VCMPEQUD vector_eqv2di {}
+
+  const int __builtin_altivec_vcmpequd_p (int, vsll, vsll);
+    VCMPEQUD_P vector_eq_v2di_p {pred}
+
+  const vsll __builtin_altivec_vcmpgtsd (vsll, vsll);
+    VCMPGTSD vector_gtv2di {}
+
+  const int __builtin_altivec_vcmpgtsd_p (int, vsll, vsll);
+    VCMPGTSD_P vector_gt_v2di_p {pred}
+
+  const vsll __builtin_altivec_vcmpgtud (vull, vull);
+    VCMPGTUD vector_gtuv2di {}
+
+  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
+    VCMPGTUD_P vector_gtu_v2di_p {pred}
+
   const vd __builtin_altivec_vnor_v2df (vd, vd);
     VNOR_V2DF norv2df3 {}
 
@@ -1717,11 +1736,11 @@
     XVCVSXWDP vsx_xvcvsxwdp {}
 
 ; Need to pick one or the other here!!  ####
-; Second one is used in the overload table (old and new) for VEC_FLOAT.
-;  const vf __builtin_vsx_xvcvsxwsp (vsi);
-;    XVCVSXWSP vsx_floatv4siv4sf2 {}
+; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvsxwsp (vsi);
-    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
+    XVCVSXWSP vsx_floatv4siv4sf2 {}
+;  const vf __builtin_vsx_xvcvsxwsp (vsi);
+;    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
 
   const vd __builtin_vsx_xvcvuxddp (vull);
     XVCVUXDDP vsx_floatunsv2div2df2 {}
@@ -1740,11 +1759,11 @@
     XVCVUXWDP vsx_xvcvuxwdp {}
 
 ; Need to pick one or the other here!! ####
-; Second one is used in the overload table (old and new) for VEC_FLOAT.
-;  const vf __builtin_vsx_xvcvuxwsp (vui);
-;    XVCVUXWSP vsx_floatunsv4siv4sf2 {}
+; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvuxwsp (vui);
-    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
+    XVCVUXWSP vsx_floatunsv4siv4sf2 {}
+;  const vf __builtin_vsx_xvcvuxwsp (vui);
+;    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
 
   fpmath vd __builtin_vsx_xvdivdp (vd, vd);
     XVDIVDP divv2df3 {}
@@ -2199,24 +2218,6 @@
   const vuc __builtin_altivec_vbpermq2 (vuc, vuc);
     VBPERMQ2 altivec_vbpermq2 {}
 
-  const vbll __builtin_altivec_vcmpequd (vull, vull);
-    VCMPEQUD vector_eqv2di {}
-
-  const int __builtin_altivec_vcmpequd_p (int, vsll, vsll);
-    VCMPEQUD_P vector_eq_v2di_p {pred}
-
-  const vsll __builtin_altivec_vcmpgtsd (vsll, vsll);
-    VCMPGTSD vector_gtv2di {}
-
-  const int __builtin_altivec_vcmpgtsd_p (int, vsll, vsll);
-    VCMPGTSD_P vector_gt_v2di_p {pred}
-
-  const vsll __builtin_altivec_vcmpgtud (vull, vull);
-    VCMPGTUD vector_gtuv2di {}
-
-  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
-    VCMPGTUD_P vector_gtu_v2di_p {pred}
-
   const vsll __builtin_altivec_vmaxsd (vsll, vsll);
     VMAXSD smaxv2di3 {}
 
@@ -2253,18 +2254,6 @@
   const vsi __builtin_altivec_vmrgow_v4si (vsi, vsi);
     VMRGOW_V4SI p8_vmrgow_v4si {}
 
-  const vsll __builtin_altivec_vmulesw (vsi, vsi);
-    VMULESW vec_widen_smult_even_v4si {}
-
-  const vull __builtin_altivec_vmuleuw (vui, vui);
-    VMULEUW vec_widen_umult_even_v4si {}
-
-  const vsll __builtin_altivec_vmulosw (vsi, vsi);
-    VMULOSW vec_widen_smult_odd_v4si {}
-
-  const vull __builtin_altivec_vmulouw (vui, vui);
-    VMULOUW vec_widen_umult_odd_v4si {}
-
   const vsc __builtin_altivec_vpermxor (vsc, vsc, vsc);
     VPERMXOR altivec_vpermxor {}
 
@@ -2296,13 +2285,13 @@
 ;  const vull __builtin_altivec_vpmsumw (vui, vui);
 ;    VPMSUMW crypto_vpmsumw {}
 
-  const vsc __builtin_altivec_vpopcntb (vsc);
+  const vuc __builtin_altivec_vpopcntb (vsc);
     VPOPCNTB popcountv16qi2 {}
 
-  const vsll __builtin_altivec_vpopcntd (vsll);
+  const vull __builtin_altivec_vpopcntd (vsll);
     VPOPCNTD popcountv2di2 {}
 
-  const vss __builtin_altivec_vpopcnth (vss);
+  const vus __builtin_altivec_vpopcnth (vss);
     VPOPCNTH popcountv8hi2 {}
 
   const vuc __builtin_altivec_vpopcntub (vuc);
@@ -2317,7 +2306,7 @@
   const vui __builtin_altivec_vpopcntuw (vui);
     VPOPCNTUW popcountv4si2 {}
 
-  const vsi __builtin_altivec_vpopcntw (vsi);
+  const vui __builtin_altivec_vpopcntw (vsi);
     VPOPCNTW popcountv4si2 {}
 
   const vsll __builtin_altivec_vrld (vsll, vull);
@@ -2716,10 +2705,10 @@
   const vuc __builtin_vsx_insert4b (vsi, vuc, const int[0,12]);
     INSERT4B insert4b {}
 
-  const vd __builtin_vsx_insert_exp_dp (vop, vull);
+  const vd __builtin_vsx_insert_exp_dp (vd, vd);
     VIEDP xviexpdp {}
 
-  const vf __builtin_vsx_insert_exp_sp (vop, vui);
+  const vf __builtin_vsx_insert_exp_sp (vf, vf);
     VIESP xviexpsp {}
 
   const signed int __builtin_vsx_scalar_cmp_exp_dp_eq (double, double);
@@ -2833,13 +2822,13 @@
   void __builtin_altivec_xst_len_r (vsc, void *, long long);
     XST_LEN_R xst_len_r {}
 
-  void __builtin_altivec_stxvl (vop, void *, long long);
+  void __builtin_altivec_stxvl (vuc, void *, long long);
     STXVL stxvl {}
 
   const signed int __builtin_scalar_byte_in_set (unsigned char, unsigned long long);
     CMPEQB cmpeqb {}
 
-  pure vop __builtin_vsx_lxvl (const void *, unsigned long long);
+  pure vuc __builtin_vsx_lxvl (const void *, unsigned long long);
     LXVL lxvl {}
 
   const unsigned int __builtin_vsx_scalar_extract_exp (double);
@@ -3374,7 +3363,7 @@
   const vus __builtin_vsx_xxblend_v8hi (vus, vus, vus);
     VXXBLEND_V8HI xxblend_v8hi {}
 
-  const vop __builtin_vsx_xxeval (vop, vop, vop, const int <8>);
+  const vull __builtin_vsx_xxeval (vull, vull, vull, const int <8>);
     XXEVAL xxeval {}
 
   const vuc __builtin_vsx_xxgenpcvm_v16qi (vuc, const int <2>);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 96d20f8d601..15caa86e20c 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2965,7 +2965,6 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 		break;
 	      }
 	  }
-	gcc_assert (unsupported_builtin);
       }
 
     if (unsupported_builtin)
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 136be4c2753..8177035ac8c 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -15671,6 +15671,7 @@ rs6000_init_builtins (void)
     = build_pointer_type (build_qualified_type (unsigned_V4SI_type_node,
 						TYPE_QUAL_CONST));
 
+  /* #### Should just always be long long???  */
   unsigned_V2DI_type_node = rs6000_vector_type (TARGET_POWERPC64
 				       ? "__vector unsigned long"
 				       : "__vector unsigned long long",
@@ -15758,10 +15759,10 @@ rs6000_init_builtins (void)
     = build_pointer_type (build_qualified_type (uintDI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_intTI_type_node
-    = build_pointer_type (build_qualified_type (intDI_type_internal_node,
+    = build_pointer_type (build_qualified_type (intTI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_uintTI_type_node
-    = build_pointer_type (build_qualified_type (uintDI_type_internal_node,
+    = build_pointer_type (build_qualified_type (uintTI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_long_integer_type_node
     = build_pointer_type
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 6405b0f7a56..8f129f47d8c 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -317,7 +317,6 @@ struct typeinfo {
   char isbool;
   char ispixel;
   char ispointer;
-  char isopaque;
   basetype base;
   restriction restr;
   int val1;
@@ -474,7 +473,6 @@ static typemap type_map[TYPE_MAP_SIZE] =
     { "if",		"ibm128_float" },
     { "ld",		"long_double" },
     { "lg",		"long_integer" },
-    { "opaque", 	"opaque_V4SI" },
     { "pbv16qi",	"ptr_bool_V16QI" },
     { "pbv2di",		"ptr_bool_V2DI" },
     { "pbv4si",		"ptr_bool_V4SI" },
@@ -972,7 +970,6 @@ match_type (typeinfo *typedata, int voidok)
        vd	vector double
        v256	__vector_pair
        v512	__vector_quad
-       vop	opaque vector (matches all vectors)
 
      For simplicity, We don't support "short int" and "long long int".
      We don't support a <basetype> of "bool", "long double", or "_Float16",
@@ -1156,11 +1153,6 @@ match_type (typeinfo *typedata, int voidok)
       handle_pointer (typedata);
       return 1;
     }
-  else if (!strcmp (token, "vop"))
-    {
-      typedata->isopaque = 1;
-      return 1;
-    }
   else if (!strcmp (token, "signed"))
     typedata->issigned = 1;
   else if (!strcmp (token, "unsigned"))
@@ -1549,20 +1541,12 @@ construct_fntype_id (prototype *protoptr)
     buf[bufi++] = 'v';
   else
     {
-      if (protoptr->rettype.isopaque)
-	{
-	  memcpy (&buf[bufi], "opaque", 6);
-	  bufi += 6;
-	}
+      if (protoptr->rettype.isunsigned)
+	buf[bufi++] = 'u';
+      if (protoptr->rettype.isvector)
+	complete_vector_type (&protoptr->rettype, buf, &bufi);
       else
-	{
-	  if (protoptr->rettype.isunsigned)
-	    buf[bufi++] = 'u';
-	  if (protoptr->rettype.isvector)
-	    complete_vector_type (&protoptr->rettype, buf, &bufi);
-	  else
-	    complete_base_type (&protoptr->rettype, buf, &bufi);
-	}
+	complete_base_type (&protoptr->rettype, buf, &bufi);
     }
 
   memcpy (&buf[bufi], "_ftype", 6);
@@ -1608,21 +1592,13 @@ construct_fntype_id (prototype *protoptr)
 	      else
 		buf[bufi++] = 'p';
 	    }
-	  if (argptr->info.isopaque)
-	    {
-	      assert (!argptr->info.ispointer);
-	      memcpy (&buf[bufi], "opaque", 6);
-	      bufi += 6;
-	    }
+
+	  if (argptr->info.isunsigned)
+	    buf[bufi++] = 'u';
+	  if (argptr->info.isvector)
+	    complete_vector_type (&argptr->info, buf, &bufi);
 	  else
-	    {
-	      if (argptr->info.isunsigned)
-		buf[bufi++] = 'u';
-	      if (argptr->info.isvector)
-		complete_vector_type (&argptr->info, buf, &bufi);
-	      else
-		complete_base_type (&argptr->info, buf, &bufi);
-	    }
+	    complete_base_type (&argptr->info, buf, &bufi);
 	}
       assert (!argptr);
       }
@@ -1965,8 +1941,7 @@ parse_ovld_entry ()
 
   /* Check for an optional overload id.  Usually we use the builtin
      function id for that purpose, but sometimes we need multiple
-     overload entries for the same builtin id when we use opaque
-     vector parameter and return types, and it needs to be unique.  */
+     overload entries for the same builtin id, and it needs to be unique.  */
   consume_whitespace ();
   if (linebuf[pos] != '\n')
     {
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 66f5836c444..ec884b63388 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -257,7 +257,7 @@
     VADDUWM  VADDUWM_VSI_VBI
   vui __builtin_vec_add (vbi, vui);
     VADDUWM  VADDUWM_VBI_VUI
-  vui __builtin_vec_add (vbi, vui);
+  vui __builtin_vec_add (vui, vbi);
     VADDUWM  VADDUWM_VUI_VBI
   vsll __builtin_vec_add (vbll, vsll);
     VADDUDM  VADDUDM_VBLL_VSLL
@@ -382,7 +382,7 @@
     VAND_V16QI_UNS  VAND_VBC_VUC
   vss __builtin_vec_and (vss, vbs);
     VAND_V8HI  VAND_VSS_VBS
-  vss __builtin_vec_and (vss, vbs);
+  vss __builtin_vec_and (vbs, vss);
     VAND_V8HI  VAND_VBS_VSS
   vus __builtin_vec_and (vus, vbs);
     VAND_V8HI_UNS  VAND_VUS_VBS
@@ -1606,9 +1606,9 @@
 
 [VEC_FLOAT, vec_float, __builtin_vec_float]
   vf __builtin_vec_float (vsi);
-    XVCVSXWSP_V4SF
+    XVCVSXWSP
   vf __builtin_vec_float (vui);
-    XVCVUXWSP_V4SF
+    XVCVUXWSP
 
 [VEC_FLOAT2, vec_float2, __builtin_vec_float2]
   vf __builtin_vec_float2 (vsll, vsll);
@@ -1634,9 +1634,10 @@
   vf __builtin_vec_floato (vd);
     FLOATO_V2DF
 
+; #### XVRSPIM{TARGET_VSX}; VRFIM
 [VEC_FLOOR, vec_floor, __builtin_vec_floor]
   vf __builtin_vec_floor (vf);
-    XVRSPIM
+    VRFIM
   vd __builtin_vec_floor (vd);
     XVRDPIM
 
@@ -2118,7 +2119,7 @@
     VMLADDUHM  VMLADDUHM_VSSVUS
   vss __builtin_vec_madd (vus, vss, vss);
     VMLADDUHM  VMLADDUHM_VUSVSS
-  vus __builtin_vec_madd (vss, vus, vus);
+  vus __builtin_vec_madd (vus, vus, vus);
     VMLADDUHM  VMLADDUHM_VUS
   vf __builtin_vec_madd (vf, vf, vf);
     VMADDFP
@@ -2896,19 +2897,19 @@
     VPMSUMD  VPMSUMD_V
 
 [VEC_POPCNT, vec_popcnt, __builtin_vec_vpopcnt, _ARCH_PWR8]
-  vsc __builtin_vec_vpopcnt (vsc);
+  vuc __builtin_vec_vpopcnt (vsc);
     VPOPCNTB
   vuc __builtin_vec_vpopcnt (vuc);
     VPOPCNTUB
-  vss __builtin_vec_vpopcnt (vss);
+  vus __builtin_vec_vpopcnt (vss);
     VPOPCNTH
   vus __builtin_vec_vpopcnt (vus);
     VPOPCNTUH
-  vsi __builtin_vec_vpopcnt (vsi);
+  vui __builtin_vec_vpopcnt (vsi);
     VPOPCNTW
   vui __builtin_vec_vpopcnt (vui);
     VPOPCNTUW
-  vsll __builtin_vec_vpopcnt (vsll);
+  vull __builtin_vec_vpopcnt (vsll);
     VPOPCNTD
   vull __builtin_vec_vpopcnt (vull);
     VPOPCNTUD
@@ -3082,9 +3083,10 @@
   vull __builtin_vec_rlnm (vull, vull);
     VRLDNM
 
+; #### XVRSPI{TARGET_VSX};VRFIN
 [VEC_ROUND, vec_round, __builtin_vec_round]
   vf __builtin_vec_round (vf);
-    XVRSPI
+    VRFIN
   vd __builtin_vec_round (vd);
     XVRDPI
 
@@ -3193,11 +3195,11 @@
     VEC_VSIGNED2_V2DF
 
 [VEC_SIGNEDE, vec_signede, __builtin_vec_vsignede]
-  vui __builtin_vec_vsignede (vd);
+  vsi __builtin_vec_vsignede (vd);
     VEC_VSIGNEDE_V2DF
 
 [VEC_SIGNEDO, vec_signedo, __builtin_vec_vsignedo]
-  vui __builtin_vec_vsignedo (vd);
+  vsi __builtin_vec_vsignedo (vd);
     VEC_VSIGNEDO_V2DF
 
 [VEC_SL, vec_sl, __builtin_vec_sl]
@@ -3356,8 +3358,8 @@
     VSL  VSL_VBLL_VUC
   vbll __builtin_vec_sll (vbll, vus);
     VSL  VSL_VBLL_VUS
-  vbll __builtin_vec_sll (vbll, vui);
-    VSL  VSL_VBLL_VUI
+  vbll __builtin_vec_sll (vbll, vull);
+    VSL  VSL_VBLL_VULL
 
 [VEC_SLO, vec_slo, __builtin_vec_slo]
   vsc __builtin_vec_slo (vsc, vsc);
@@ -3686,14 +3688,10 @@
     STVX_V4SI  STVX_VSI
   void __builtin_vec_st (vsi, signed long long, signed int *);
     STVX_V4SI  STVX_SI
-  void __builtin_vec_st (vsi, signed long long, signed long *);
-    STVX_V4SI  STVX_SL
   void __builtin_vec_st (vui, signed long long, vui *);
     STVX_V4SI  STVX_VUI
   void __builtin_vec_st (vui, signed long long, unsigned int *);
     STVX_V4SI  STVX_UI
-  void __builtin_vec_st (vui, signed long long, unsigned long *);
-    STVX_V4SI  STVX_UL
   void __builtin_vec_st (vbi, signed long long, vbi *);
     STVX_V4SI  STVX_VBI
   void __builtin_vec_st (vbi, signed long long, signed int *);
@@ -4190,7 +4188,7 @@
 [VEC_SUM4S, vec_sum4s, __builtin_vec_sum4s]
   vui __builtin_vec_sum4s (vuc, vui);
     VSUM4UBS
-  vsi __builtin_vec_sum4s (vsc, vui);
+  vsi __builtin_vec_sum4s (vsc, vsi);
     VSUM4SBS
   vsi __builtin_vec_sum4s (vss, vsi);
     VSUM4SHS
@@ -4219,9 +4217,10 @@
   signed int __builtin_vec_xvtlsbb_all_zeros (vuc);
     XVTLSBB_ZEROS
 
+; #### XVRSPIZ{TARGET_VSX}; VRFIZ
 [VEC_TRUNC, vec_trunc, __builtin_vec_trunc]
   vf __builtin_vec_trunc (vf);
-    XVRSPIZ
+    VRFIZ
   vd __builtin_vec_trunc (vd);
     XVRDPIZ
 
@@ -4286,13 +4285,13 @@
     DOUBLEL_V4SF VUPKLF
 
 [VEC_UNSIGNED, vec_unsigned, __builtin_vec_vunsigned]
-  vsi __builtin_vec_vunsigned (vf);
+  vui __builtin_vec_vunsigned (vf);
     VEC_VUNSIGNED_V4SF
-  vsll __builtin_vec_vunsigned (vd);
+  vull __builtin_vec_vunsigned (vd);
     VEC_VUNSIGNED_V2DF
 
 [VEC_UNSIGNED2, vec_unsigned2, __builtin_vec_vunsigned2]
-  vsi __builtin_vec_vunsigned2 (vd, vd);
+  vui __builtin_vec_vunsigned2 (vd, vd);
     VEC_VUNSIGNED2_V2DF
 
 [VEC_UNSIGNEDE, vec_unsignede, __builtin_vec_vunsignede]
diff --git a/gcc/testsuite/gcc.dg/vmx/ops.c b/gcc/testsuite/gcc.dg/vmx/ops.c
index 735710819f9..b8f80930078 100644
--- a/gcc/testsuite/gcc.dg/vmx/ops.c
+++ b/gcc/testsuite/gcc.dg/vmx/ops.c
@@ -317,8 +317,6 @@ void f2() {
   *var_vec_b16++ = vec_cmpgt(var_vec_u16[0], var_vec_u16[1]);
   *var_vec_b16++ = vec_ld(var_int[0], var_vec_b16_ptr[1]);
   *var_vec_b16++ = vec_ldl(var_int[0], var_vec_b16_ptr[1]);
-  *var_vec_b16++ = vec_lvx(var_int[0], var_vec_b16_ptr[1]);
-  *var_vec_b16++ = vec_lvxl(var_int[0], var_vec_b16_ptr[1]);
   *var_vec_b16++ = vec_mergeh(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_mergel(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_nor(var_vec_b16[0], var_vec_b16[1]);
@@ -357,8 +355,6 @@ void f3() {
   *var_vec_b32++ = vec_cmpgt(var_vec_u32[0], var_vec_u32[1]);
   *var_vec_b32++ = vec_ld(var_int[0], var_vec_b32_ptr[1]);
   *var_vec_b32++ = vec_ldl(var_int[0], var_vec_b32_ptr[1]);
-  *var_vec_b32++ = vec_lvx(var_int[0], var_vec_b32_ptr[1]);
-  *var_vec_b32++ = vec_lvxl(var_int[0], var_vec_b32_ptr[1]);
   *var_vec_b32++ = vec_mergeh(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_mergel(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_nor(var_vec_b32[0], var_vec_b32[1]);
@@ -389,8 +385,6 @@ void f4() {
   *var_vec_b8++ = vec_cmpgt(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_b8++ = vec_ld(var_int[0], var_vec_b8_ptr[1]);
   *var_vec_b8++ = vec_ldl(var_int[0], var_vec_b8_ptr[1]);
-  *var_vec_b8++ = vec_lvx(var_int[0], var_vec_b8_ptr[1]);
-  *var_vec_b8++ = vec_lvxl(var_int[0], var_vec_b8_ptr[1]);
 }
 void f5() {
   *var_vec_b8++ = vec_mergeh(var_vec_b8[0], var_vec_b8[1]);
@@ -506,11 +500,6 @@ void f6() {
   *var_vec_f32++ = vec_ldl(var_int[0], var_float_ptr[1]);
   *var_vec_f32++ = vec_ldl(var_int[0], var_vec_f32_ptr[1]);
   *var_vec_f32++ = vec_loge(var_vec_f32[0]);
-  *var_vec_f32++ = vec_lvewx(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvx(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvx(var_int[0], var_vec_f32_ptr[1]);
-  *var_vec_f32++ = vec_lvxl(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvxl(var_int[0], var_vec_f32_ptr[1]);
   *var_vec_f32++ = vec_madd(var_vec_f32[0], var_vec_f32[1], var_vec_f32[2]);
   *var_vec_f32++ = vec_max(var_vec_f32[0], var_vec_f32[1]);
   *var_vec_f32++ = vec_mergeh(var_vec_f32[0], var_vec_f32[1]);
@@ -562,8 +551,6 @@ void f9() {
   *var_vec_f32++ = vec_xor(var_vec_f32[0], var_vec_f32[1]);
   *var_vec_p16++ = vec_ld(var_int[0], var_vec_p16_ptr[1]);
   *var_vec_p16++ = vec_ldl(var_int[0], var_vec_p16_ptr[1]);
-  *var_vec_p16++ = vec_lvx(var_int[0], var_vec_p16_ptr[1]);
-  *var_vec_p16++ = vec_lvxl(var_int[0], var_vec_p16_ptr[1]);
   *var_vec_p16++ = vec_mergeh(var_vec_p16[0], var_vec_p16[1]);
   *var_vec_p16++ = vec_mergel(var_vec_p16[0], var_vec_p16[1]);
   *var_vec_p16++ = vec_packpx(var_vec_u32[0], var_vec_u32[1]);
@@ -622,11 +609,6 @@ void f10() {
   *var_vec_s16++ = vec_lde(var_int[0], var_short_ptr[1]);
   *var_vec_s16++ = vec_ldl(var_int[0], var_short_ptr[1]);
   *var_vec_s16++ = vec_ldl(var_int[0], var_vec_s16_ptr[1]);
-  *var_vec_s16++ = vec_lvehx(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvx(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvx(var_int[0], var_vec_s16_ptr[1]);
-  *var_vec_s16++ = vec_lvxl(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvxl(var_int[0], var_vec_s16_ptr[1]);
   *var_vec_s16++ = vec_madds(var_vec_s16[0], var_vec_s16[1], var_vec_s16[2]);
   *var_vec_s16++ = vec_max(var_vec_b16[0], var_vec_s16[1]);
   *var_vec_s16++ = vec_max(var_vec_s16[0], var_vec_b16[1]);
@@ -787,11 +769,6 @@ void f13() {
   *var_vec_s32++ = vec_lde(var_int[0], var_int_ptr[1]);
   *var_vec_s32++ = vec_ldl(var_int[0], var_int_ptr[1]);
   *var_vec_s32++ = vec_ldl(var_int[0], var_vec_s32_ptr[1]);
-  *var_vec_s32++ = vec_lvewx(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvx(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvx(var_int[0], var_vec_s32_ptr[1]);
-  *var_vec_s32++ = vec_lvxl(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvxl(var_int[0], var_vec_s32_ptr[1]);
   *var_vec_s32++ = vec_max(var_vec_b32[0], var_vec_s32[1]);
   *var_vec_s32++ = vec_max(var_vec_s32[0], var_vec_b32[1]);
   *var_vec_s32++ = vec_max(var_vec_s32[0], var_vec_s32[1]);
@@ -919,11 +896,6 @@ void f17() {
   *var_vec_s8++ = vec_lde(var_int[0], var_signed_char_ptr[1]);
   *var_vec_s8++ = vec_ldl(var_int[0], var_signed_char_ptr[1]);
   *var_vec_s8++ = vec_ldl(var_int[0], var_vec_s8_ptr[1]);
-  *var_vec_s8++ = vec_lvebx(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvx(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvx(var_int[0], var_vec_s8_ptr[1]);
-  *var_vec_s8++ = vec_lvxl(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvxl(var_int[0], var_vec_s8_ptr[1]);
   *var_vec_s8++ = vec_max(var_vec_b8[0], var_vec_s8[1]);
   *var_vec_s8++ = vec_max(var_vec_s8[0], var_vec_b8[1]);
   *var_vec_s8++ = vec_max(var_vec_s8[0], var_vec_s8[1]);
@@ -1050,11 +1022,6 @@ void f19() {
   *var_vec_u16++ = vec_lde(var_int[0], var_unsigned_short_ptr[1]);
   *var_vec_u16++ = vec_ldl(var_int[0], var_unsigned_short_ptr[1]);
   *var_vec_u16++ = vec_ldl(var_int[0], var_vec_u16_ptr[1]);
-  *var_vec_u16++ = vec_lvehx(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvx(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvx(var_int[0], var_vec_u16_ptr[1]);
-  *var_vec_u16++ = vec_lvxl(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvxl(var_int[0], var_vec_u16_ptr[1]);
   *var_vec_u16++ = vec_max(var_vec_b16[0], var_vec_u16[1]);
   *var_vec_u16++ = vec_max(var_vec_u16[0], var_vec_b16[1]);
   *var_vec_u16++ = vec_max(var_vec_u16[0], var_vec_u16[1]);
@@ -1213,11 +1180,6 @@ void f22() {
   *var_vec_u32++ = vec_lde(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u32++ = vec_ldl(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u32++ = vec_ldl(var_int[0], var_vec_u32_ptr[1]);
-  *var_vec_u32++ = vec_lvewx(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvx(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvx(var_int[0], var_vec_u32_ptr[1]);
-  *var_vec_u32++ = vec_lvxl(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvxl(var_int[0], var_vec_u32_ptr[1]);
   *var_vec_u32++ = vec_max(var_vec_b32[0], var_vec_u32[1]);
   *var_vec_u32++ = vec_max(var_vec_u32[0], var_vec_b32[1]);
   *var_vec_u32++ = vec_max(var_vec_u32[0], var_vec_u32[1]);
@@ -1341,7 +1303,6 @@ void f25() {
   *var_vec_u8++ = vec_lde(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_ldl(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_ldl(var_int[0], var_vec_u8_ptr[1]);
-  *var_vec_u8++ = vec_lvebx(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_float_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_int_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_short_ptr[1]);
@@ -1356,12 +1317,8 @@ void f25() {
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u8++ = vec_lvx(var_int[0], var_unsigned_char_ptr[1]);
-  *var_vec_u8++ = vec_lvx(var_int[0], var_vec_u8_ptr[1]);
 }
 void f26() {
-  *var_vec_u8++ = vec_lvxl(var_int[0], var_unsigned_char_ptr[1]);
-  *var_vec_u8++ = vec_lvxl(var_int[0], var_vec_u8_ptr[1]);
   *var_vec_u8++ = vec_max(var_vec_b8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_max(var_vec_u8[0], var_vec_b8[1]);
   *var_vec_u8++ = vec_max(var_vec_u8[0], var_vec_u8[1]);
@@ -2353,47 +2310,4 @@ void f37() {
   vec_stl(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
   vec_stl(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
   vec_stl(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
-  vec_stvebx(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvebx(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvehx(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvehx(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvewx(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvewx(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvewx(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvx(var_vec_b16[0], var_int[1], var_vec_b16_ptr[2]);
-  vec_stvx(var_vec_b32[0], var_int[1], var_vec_b32_ptr[2]);
-  vec_stvx(var_vec_b8[0], var_int[1], var_vec_b8_ptr[2]);
-  vec_stvx(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvx(var_vec_f32[0], var_int[1], var_vec_f32_ptr[2]);
-  vec_stvx(var_vec_p16[0], var_int[1], var_vec_p16_ptr[2]);
-  vec_stvx(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvx(var_vec_s16[0], var_int[1], var_vec_s16_ptr[2]);
-  vec_stvx(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvx(var_vec_s32[0], var_int[1], var_vec_s32_ptr[2]);
-  vec_stvx(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvx(var_vec_s8[0], var_int[1], var_vec_s8_ptr[2]);
-  vec_stvx(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvx(var_vec_u16[0], var_int[1], var_vec_u16_ptr[2]);
-  vec_stvx(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvx(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
-  vec_stvx(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvx(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
-  vec_stvxl(var_vec_b16[0], var_int[1], var_vec_b16_ptr[2]);
-  vec_stvxl(var_vec_b32[0], var_int[1], var_vec_b32_ptr[2]);
-  vec_stvxl(var_vec_b8[0], var_int[1], var_vec_b8_ptr[2]);
-  vec_stvxl(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvxl(var_vec_f32[0], var_int[1], var_vec_f32_ptr[2]);
-  vec_stvxl(var_vec_p16[0], var_int[1], var_vec_p16_ptr[2]);
-  vec_stvxl(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvxl(var_vec_s16[0], var_int[1], var_vec_s16_ptr[2]);
-  vec_stvxl(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvxl(var_vec_s32[0], var_int[1], var_vec_s32_ptr[2]);
-  vec_stvxl(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvxl(var_vec_s8[0], var_int[1], var_vec_s8_ptr[2]);
-  vec_stvxl(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvxl(var_vec_u16[0], var_int[1], var_vec_u16_ptr[2]);
-  vec_stvxl(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvxl(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
-  vec_stvxl(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvxl(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 42c04a1ed79..0cef426fcd9 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -26,25 +26,23 @@ int main ()
 {
   *vecfloat++ = vec_andc((vector bool int)vecint[0], vecfloat[1]);
   *vecfloat++ = vec_andc(vecfloat[0], (vector bool int)vecint[1]);
-  *vecfloat++ = vec_vxor((vector bool int)vecint[0], vecfloat[1]);
-  *vecfloat++ = vec_vxor(vecfloat[0], (vector bool int)vecint[1]);
+  *vecfloat++ = vec_xor((vector bool int)vecint[0], vecfloat[1]);
+  *vecfloat++ = vec_xor(vecfloat[0], (vector bool int)vecint[1]);
   *varpixel++ = vec_packpx(vecuint[0], vecuint[1]);
-  *varpixel++ = vec_vpkpx(vecuint[0], vecuint[1]);
-  *vecshort++ = vec_vmulesb(vecchar[0], vecchar[1]);
-  *vecshort++ = vec_vmulosb(vecchar[0], vecchar[1]);
+  *vecshort++ = vec_mule(vecchar[0], vecchar[1]);
+  *vecshort++ = vec_mulo(vecchar[0], vecchar[1]);
   *vecint++ = vec_ld(var_int[0], intp[1]);
   *vecint++ = vec_lde(var_int[0], intp[1]);
   *vecint++ = vec_ldl(var_int[0], intp[1]);
-  *vecint++ = vec_lvewx(var_int[0], intp[1]);
   *vecint++ = vec_unpackh(vecshort[0]);
   *vecint++ = vec_unpackl(vecshort[0]);
   *vecushort++ = vec_andc((vector bool short)vecshort[0], vecushort[1]);
   *vecushort++ = vec_andc(vecushort[0], (vector bool short)vecshort[1]);
-  *vecushort++ = vec_vxor((vector bool short)vecshort[0], vecushort[1]);
-  *vecushort++ = vec_vxor(vecushort[0], (vector bool short)vecshort[1]);
+  *vecushort++ = vec_xor((vector bool short)vecshort[0], vecushort[1]);
+  *vecushort++ = vec_xor(vecushort[0], (vector bool short)vecshort[1]);
   *vecuint++ = vec_ld(var_int[0], uintp[1]);
   *vecuint++ = vec_lvx(var_int[0], uintp[1]);
-  *vecuint++ = vec_vmsumubm(vecuchar[0], vecuchar[1], vecuint[2]);
+  *vecuint++ = vec_msum(vecuchar[0], vecuchar[1], vecuint[2]);
   *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]);
 
   *vecubi++ = vec_unpackh(vecubsi[0]);
@@ -62,11 +60,10 @@ int main ()
 
 /* Expected results:
      vec_packpx                     vpkpx
-     vec_vmulosb                    vmulesb
+     vec_mulo                       vmulesb
      vec_ld                         lxv2x
      vec_lde                        lvewx
      vec_ldl                        lxvl
-     vec_lvewx                      lvewx
      vec_unpackh                    vupklsh
      vec_unpackh                    vupklpx
      vec_unpackh                    vupklsb
@@ -75,10 +72,10 @@ int main ()
      vec_unpackl                    vupkhsb
      vec_andc                       xxlnor (vnor AIX)
                                     xxland (vand AIX)
-     vec_vxor                       xxlxor
-     vec_vmsumubm                   vmsumubm
-     vec_vmulesb                    vmulosb
-     vec_vmulosb                    vmulesb
+     vec_xor                        xxlxor
+     vec_msum                       vmsumubm
+     vec_mule                       vmulosb
+     vec_mulo                       vmulesb
      vec_ld                         lvx
 */
 
@@ -89,7 +86,7 @@ int main ()
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
-/* { dg-final { scan-assembler-times "lvewx" 2 } } */
+/* { dg-final { scan-assembler-times "lvewx" 1 } } */
 /* { dg-final { scan-assembler-times "lvxl" 1 } } */
 /* { dg-final { scan-assembler-times "vupklsh" 2 } } */
 /* { dg-final { scan-assembler-times "vupkhsh" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
index 7a1e8e8bd30..46d743a899b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
@@ -10,5 +10,5 @@ test_neg (float *p)
 {
   float source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_sp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
index c9b90927693..bfc892b116e 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
@@ -10,5 +10,5 @@ test_neg (double *p)
 {
   double source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_dp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
index e70eb2d46f8..8c55c1cfb5c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
@@ -10,5 +10,5 @@ test_neg (__ieee128 *p)
 {
   __ieee128 source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_qp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
index 44c0397c49a..e023076bac7 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
@@ -73,10 +73,10 @@ int main() {
          abort();
    }
    vfexpt = (vector float){1.0, -2.0, 0.0, 8.5};
-   vfr = vec_extract_fp_from_shorth(vusha);
+   vfr = vec_extract_fp32_from_shorth(vusha);
 
 #ifdef DEBUG
-   printf ("vec_extract_fp_from_shorth\n");
+   printf ("vec_extract_fp32_from_shorth\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);
@@ -88,10 +88,10 @@ int main() {
    }
 
    vfexpt = (vector float){1.5, 0.5, 1.25, -0.25};
-   vfr = vec_extract_fp_from_shortl(vusha);
+   vfr = vec_extract_fp32_from_shortl(vusha);
 
 #ifdef DEBUG
-   printf ("\nvec_extract_fp_from_shortl\n");
+   printf ("\nvec_extract_fp32_from_shortl\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:18 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:449fc24a2f1dae96d80ee66bfea303b0225fb203

commit 449fc24a2f1dae96d80ee66bfea303b0225fb203
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Fri Jan 8 17:08:42 2021 -0600

    rs6000: More bug fixes
    
    2021-01-08  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def (__builtin_altivec_vsr):
            Fix argument types.
            (__builtin_altivec_vsro): Likewise.
    
    gcc/testsuite/
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Fix expected error message.
            * gcc.target/powerpc/dfp/dtstsfi-16.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-51.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-56.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-71.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-76.c: Likewise.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def          | 4 ++--
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 645d4b0425f..6fa121bb38d 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -933,7 +933,7 @@
   const vsi __builtin_altivec_vspltw (vsi, const int<2>);
     VSPLTW altivec_vspltw {}
 
-  const vop __builtin_altivec_vsr (vop, vuc);
+  const vop __builtin_altivec_vsr (vop, vop);
     VSR altivec_vsr {}
 
   const vsc __builtin_altivec_vsrab (vsc, vuc);
@@ -951,7 +951,7 @@
   const vss __builtin_altivec_vsrh (vss, vus);
     VSRH vlshrv8hi3 {}
 
-  const vop __builtin_altivec_vsro (vop, vuc);
+  const vop __builtin_altivec_vsro (vop, vop);
     VSRO altivec_vsro {}
 
   const vsi __builtin_altivec_vsrw (vsi, vui);
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index b5bea3cf1a0..6338a0e4278 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */ /* { dg-error "'__builtin_dtstsfi_lt_dd' requires" }  */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
index c6a42f089e0..d889bdd385c 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
index 5d9d5d61b42..0d47cc27897 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
index ca5e0098411..f070a0c4a7b 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
index 5e4f4964aaa..451a9e74c28 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
index 02ff47441e5..d0833c80f60 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
index 6c64021a479..1a54150617e 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
index 982ed5d79df..74269fac328 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_td' requires" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:17 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:17 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:81f9be479db8a83927e659a7e892fe8ec9af3cc1

commit 81f9be479db8a83927e659a7e892fe8ec9af3cc1
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Fri Jan 8 14:42:22 2021 -0600

    rs6000: More bug fixes
    
    2021-01-08  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/emmintrin.h: Change deprecated built-in calls.
            * config/rs6000/rs6000-builtin-new.def
            (__builtin_altivec_vcmpgtud_p): Fix arguments.
            (__builtin_altivec_vcmpaeb_p et al.): Remove {pred}.
    
    gcc/testsuite/
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Add second expected error
            message.

Diff:
---
 gcc/config/rs6000/emmintrin.h                     | 30 +++++++++++------------
 gcc/config/rs6000/rs6000-builtin-new.def          | 26 ++++++++++----------
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c |  2 +-
 3 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/gcc/config/rs6000/emmintrin.h b/gcc/config/rs6000/emmintrin.h
index ce1287edf78..9c4d5fa13c7 100644
--- a/gcc/config/rs6000/emmintrin.h
+++ b/gcc/config/rs6000/emmintrin.h
@@ -892,8 +892,8 @@ _mm_cvtpd_epi32 (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4si) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4si) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -931,8 +931,8 @@ _mm_cvtpd_ps (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4sf) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4sf) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -964,8 +964,8 @@ _mm_cvttpd_epi32 (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4si) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4si) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -1254,8 +1254,8 @@ _mm_movemask_pd (__m128d  __A)
     };
 
   result = ((__vector unsigned long long)
-	    vec_vbpermq ((__vector unsigned char) __A,
-			 (__vector unsigned char) perm_mask));
+	    vec_bperm ((__vector unsigned char) __A,
+		       (__vector unsigned char) perm_mask));
 
 #ifdef __LITTLE_ENDIAN__
   return result[1];
@@ -1434,7 +1434,7 @@ _mm_madd_epi16 (__m128i __A, __m128i __B)
 {
   __vector signed int zero = {0, 0, 0, 0};
 
-  return (__m128i) vec_vmsumshm ((__v8hi)__A, (__v8hi)__B, zero);
+  return (__m128i) vec_msum ((__v8hi)__A, (__v8hi)__B, zero);
 }
 
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -1452,8 +1452,8 @@ _mm_mulhi_epi16 (__m128i __A, __m128i __B)
 #endif
     };
 
-  w0 = vec_vmulesh ((__v8hi)__A, (__v8hi)__B);
-  w1 = vec_vmulosh ((__v8hi)__A, (__v8hi)__B);
+  w0 = vec_mule ((__v8hi)__A, (__v8hi)__B);
+  w1 = vec_mulo ((__v8hi)__A, (__v8hi)__B);
   return (__m128i) vec_perm (w0, w1, xform1);
 }
 
@@ -2046,8 +2046,8 @@ _mm_movemask_epi8 (__m128i __A)
     };
 
   result = ((__vector unsigned long long)
-	    vec_vbpermq ((__vector unsigned char) __A,
-			 (__vector unsigned char) perm_mask));
+	    vec_bperm ((__vector unsigned char) __A,
+		       (__vector unsigned char) perm_mask));
 
 #ifdef __LITTLE_ENDIAN__
   return result[1];
@@ -2071,8 +2071,8 @@ _mm_mulhi_epu16 (__m128i __A, __m128i __B)
 #endif
     };
 
-  w0 = vec_vmuleuh ((__v8hu)__A, (__v8hu)__B);
-  w1 = vec_vmulouh ((__v8hu)__A, (__v8hu)__B);
+  w0 = vec_mule ((__v8hu)__A, (__v8hu)__B);
+  w1 = vec_mulo ((__v8hu)__A, (__v8hu)__B);
   return (__m128i) vec_perm (w0, w1, xform1);
 }
 
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 2c1eabd4fde..645d4b0425f 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -2214,7 +2214,7 @@
   const vsll __builtin_altivec_vcmpgtud (vull, vull);
     VCMPGTUD vector_gtuv2di {}
 
-  const int __builtin_altivec_vcmpgtud_p (vull, vull);
+  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
     VCMPGTUD_P vector_gtu_v2di_p {pred}
 
   const vsll __builtin_altivec_vmaxsd (vsll, vsll);
@@ -2582,49 +2582,49 @@
     VCTZLSBB_V8HI vctzlsbb_v8hi {}
 
   const signed int __builtin_altivec_vcmpaeb_p (vsc, vsc);
-    VCMPAEB_P vector_ae_v16qi_p {pred}
+    VCMPAEB_P vector_ae_v16qi_p {}
 
   const signed int __builtin_altivec_vcmpaed_p (vsll, vsll);
-    VCMPAED_P vector_ae_v2di_p {pred}
+    VCMPAED_P vector_ae_v2di_p {}
 
   const signed int __builtin_altivec_vcmpaedp_p (vd, vd);
-    VCMPAEDP_P vector_ae_v2df_p {pred}
+    VCMPAEDP_P vector_ae_v2df_p {}
 
   const signed int __builtin_altivec_vcmpaefp_p (vf, vf);
-    VCMPAEFP_P vector_ae_v4sf_p {pred}
+    VCMPAEFP_P vector_ae_v4sf_p {}
 
   const signed int __builtin_altivec_vcmpaeh_p (vss, vss);
-    VCMPAEH_P vector_ae_v8hi_p {pred}
+    VCMPAEH_P vector_ae_v8hi_p {}
 
   const signed int __builtin_altivec_vcmpaew_p (vsi, vsi);
-    VCMPAEW_P vector_ae_v4si_p {pred}
+    VCMPAEW_P vector_ae_v4si_p {}
 
   const vsc __builtin_altivec_vcmpneb (vsc, vsc);
     VCMPNEB vcmpneb {}
 
   const signed int __builtin_altivec_vcmpneb_p (vsc, vsc);
-    VCMPNEB_P vector_ne_v16qi_p {pred}
+    VCMPNEB_P vector_ne_v16qi_p {}
 
   const signed int __builtin_altivec_vcmpned_p (vsll, vsll);
-    VCMPNED_P vector_ne_v2di_p {pred}
+    VCMPNED_P vector_ne_v2di_p {}
 
   const signed int __builtin_altivec_vcmpnedp_p (vd, vd);
-    VCMPNEDP_P vector_ne_v2df_p {pred}
+    VCMPNEDP_P vector_ne_v2df_p {}
 
   const signed int __builtin_altivec_vcmpnefp_p (vf, vf);
-    VCMPNEFP_P vector_ne_v4sf_p {pred}
+    VCMPNEFP_P vector_ne_v4sf_p {}
 
   const vss __builtin_altivec_vcmpneh (vss, vss);
     VCMPNEH vcmpneh {}
 
   const signed int __builtin_altivec_vcmpneh_p (vss, vss);
-    VCMPNEH_P vector_ne_v8hi_p {pred}
+    VCMPNEH_P vector_ne_v8hi_p {}
 
   const vsi __builtin_altivec_vcmpnew (vsi, vsi);
     VCMPNEW vcmpnew {}
 
   const signed int __builtin_altivec_vcmpnew_p (vsi, vsi);
-    VCMPNEW_P vector_ne_v4si_p {pred}
+    VCMPNEW_P vector_ne_v4si_p {}
 
   const vsc __builtin_altivec_vcmpnezb (vsc, vsc);
     CMPNEZB vcmpnezb {}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index c56a24e0db4..b5bea3cf1a0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */ /* { dg-error "'__builtin_dtstsfi_lt_dd' requires" }  */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:17 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:17 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:7ff8854fbeca0344663b584452d7505ecf7a9a30

commit 7ff8854fbeca0344663b584452d7505ecf7a9a30
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 7 12:17:54 2021 -0600

    rs6000: More bug fixes
    
    2021-01-07  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def
            * config/rs6000-overload.def
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-10.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-10.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-12.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-13.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-14.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-15.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-16.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-17.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-18.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-19.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-30.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-31.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-32.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-33.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-34.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-35.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-36.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-37.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-38.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-39.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-50.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-51.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-52.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-53.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-54.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-55.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-56.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-57.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-58.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-59.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-70.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-71.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-72.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-73.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-74.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-75.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-76.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-77.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-78.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-79.c: Adjust.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def           | 26 ++++++++---------
 gcc/config/rs6000/rs6000-overload.def              | 34 +++++++++++-----------
 gcc/testsuite/gcc.target/powerpc/altivec-10.c      |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-2.c     |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-3.c     |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-5.c     |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c  |  2 +-
 46 files changed, 74 insertions(+), 74 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 8b54b17e1ce..2c1eabd4fde 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -2734,10 +2734,10 @@
   const signed int __builtin_vsx_scalar_cmp_exp_dp_unordered (double, double);
     VSCEDPUO xscmpexpdp_unordered {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_dp (double, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_dp (double, const int<7>);
     VSTDCDP xststdcdp {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_sp (float, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_sp (float, const int<7>);
     VSTDCSP xststdcsp {}
 
   const unsigned int __builtin_vsx_scalar_test_neg_dp (double);
@@ -2746,10 +2746,10 @@
   const unsigned int __builtin_vsx_scalar_test_neg_sp (float);
     VSTDCNSP xststdcnegsp {}
 
-  const vbll __builtin_vsx_test_data_class_dp (vd, signed int);
+  const vbll __builtin_vsx_test_data_class_dp (vd, const int<7>);
     VTDCDP xvtstdcdp {}
 
-  const vbi __builtin_vsx_test_data_class_sp (vf, signed int);
+  const vbi __builtin_vsx_test_data_class_sp (vf, const int<7>);
     VTDCSP xvtstdcsp {}
 
   const vf __builtin_vsx_vextract_fp_from_shorth (vus);
@@ -2794,28 +2794,28 @@
   double __builtin_mffsl ();
     MFFSL rs6000_mffsl {}
 
-  const signed int __builtin_dtstsfi_eq_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_eq_dd (const int<6>, _Decimal64);
     TSTSFI_EQ_DD dfptstsfi_eq_dd {}
 
-  const signed int __builtin_dtstsfi_eq_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_eq_td (const int<6>, _Decimal128);
     TSTSFI_EQ_TD dfptstsfi_eq_td {}
 
-  const signed int __builtin_dtstsfi_gt_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_gt_dd (const int<6>, _Decimal64);
     TSTSFI_GT_DD dfptstsfi_gt_dd {}
 
-  const signed int __builtin_dtstsfi_gt_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_gt_td (const int<6>, _Decimal128);
     TSTSFI_GT_TD dfptstsfi_gt_td {}
 
-  const signed int __builtin_dtstsfi_lt_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_lt_dd (const int<6>, _Decimal64);
     TSTSFI_LT_DD dfptstsfi_lt_dd {}
 
-  const signed int __builtin_dtstsfi_lt_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_lt_td (const int<6>, _Decimal128);
     TSTSFI_LT_TD dfptstsfi_lt_td {}
 
-  const signed int __builtin_dtstsfi_ov_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_ov_dd (const int<6>, _Decimal64);
     TSTSFI_OV_DD dfptstsfi_unordered_dd {}
 
-  const signed int __builtin_dtstsfi_ov_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_ov_td (const int<6>, _Decimal128);
     TSTSFI_OV_TD dfptstsfi_unordered_td {}
 
 
@@ -2905,7 +2905,7 @@
   const _Float128 __builtin_vsx_scalar_insert_exp_qp (_Float128, unsigned long long);
     VSIEQPF xsiexpqpf_kf {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_qp (_Float128, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_qp (_Float128, const int<7>);
     VSTDCQP xststdcqp_kf {}
 
   const unsigned int __builtin_vsx_scalar_test_neg_qp (_Float128);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 60a18a79416..45e95ea3063 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3548,27 +3548,27 @@
     XVRDPIZ
 
 [VEC_TSTSFI_GT, SKIP, __builtin_dfp_dtstsfi_gt]
-  signed int __builtin_dfp_dtstsfi_gt (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_gt (const int, _Decimal64);
     TSTSFI_GT_DD
-  signed int __builtin_dfp_dtstsfi_gt (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_gt (const int, _Decimal128);
     TSTSFI_GT_TD
 
 [VEC_TSTSFI_EQ, SKIP, __builtin_dfp_dtstsfi_eq]
-  signed int __builtin_dfp_dtstsfi_eq (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_eq (const int, _Decimal64);
     TSTSFI_EQ_DD
-  signed int __builtin_dfp_dtstsfi_eq (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_eq (const int, _Decimal128);
     TSTSFI_EQ_TD
 
 [VEC_TSTSFI_LT, SKIP, __builtin_dfp_dtstsfi_lt]
-  signed int __builtin_dfp_dtstsfi_lt (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_lt (const int, _Decimal64);
     TSTSFI_LT_DD
-  signed int __builtin_dfp_dtstsfi_lt (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_lt (const int, _Decimal128);
     TSTSFI_LT_TD
 
 [VEC_TSTSFI_OV, SKIP, __builtin_dfp_dtstsfi_ov]
-  signed int __builtin_dfp_dtstsfi_ov (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_ov (const int, _Decimal64);
     TSTSFI_OV_DD
-  signed int __builtin_dfp_dtstsfi_ov (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_ov (const int, _Decimal128);
     TSTSFI_OV_TD
 
 [VEC_UNPACKH, vec_unpackh, __builtin_vec_unpackh]
@@ -3637,7 +3637,7 @@
   vull __builtin_vec_extract_sig (vd);
     VESDP
 
-[VEC_VIE, vec_insert_exp, __builtin_vec_insert_exp, ARCH_PWR9]
+[VEC_VIE, vec_insert_exp, __builtin_vec_insert_exp, _ARCH_PWR9]
   vf __builtin_vec_insert_exp (vf, vui);
     VIESP  VIESP_VF
   vf __builtin_vec_insert_exp (vui, vui);
@@ -3694,25 +3694,25 @@
     VSIEQPF
 
 [VEC_VSTDC, scalar_test_data_class, __builtin_vec_scalar_test_data_class, _ARCH_PWR9]
-  bool __builtin_vec_scalar_test_data_class (float, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (float, const int);
     VSTDCSP
-  bool __builtin_vec_scalar_test_data_class (double, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (double, const int);
     VSTDCDP
-  bool __builtin_vec_scalar_test_data_class (_Float128, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (_Float128, const int);
     VSTDCQP
 
 [VEC_VSTDCN, scalar_test_neg, __builtin_vec_scalar_test_neg, _ARCH_PWR9]
-  bool __builtin_vec_scalar_test_neg (float);
+  unsigned int __builtin_vec_scalar_test_neg (float);
     VSTDCNSP
-  bool __builtin_vec_scalar_test_neg (double);
+  unsigned int __builtin_vec_scalar_test_neg (double);
     VSTDCNDP
-  bool __builtin_vec_scalar_test_neg (_Float128);
+  unsigned int __builtin_vec_scalar_test_neg (_Float128);
     VSTDCNQP
 
 [VEC_VTDC, vec_test_data_class, __builtin_vec_test_data_class, _ARCH_PWR9]
-  vbi __builtin_vec_test_data_class (vf, signed int);
+  vbi __builtin_vec_test_data_class (vf, const int);
     VTDCSP
-  vbll __builtin_vec_test_data_class (vd, signed int);
+  vbll __builtin_vec_test_data_class (vd, const int);
     VTDCDP
 
 [VEC_XL, vec_xl, __builtin_vec_vsx_ld, __VSX__]
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-10.c b/gcc/testsuite/gcc.target/powerpc/altivec-10.c
index f532eebbfab..e12b88a165b 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-10.c
@@ -61,7 +61,7 @@ check_cmple()
   vector float a = {1.0, 2.0, 3.0, 4.0};
   vector float b = {1.0, 3.0, 2.0, 5.0};
   vector bool int aux;
-  vector signed int le = {-1, -1, 0, -1};
+  vector bool int le = (vector bool int){-1, -1, 0, -1};
 
   aux = vec_cmple (a, b);
 
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
index 7d2b4deefc3..7a1e8e8bd30 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
@@ -10,5 +10,5 @@ test_neg (float *p)
 {
   float source = *p;
 
-  return __builtin_vec_scalar_test_neg_sp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_sp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
index b503dfa8b56..c9b90927693 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
@@ -10,5 +10,5 @@ test_neg (double *p)
 {
   double source = *p;
 
-  return __builtin_vec_scalar_test_neg_dp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_dp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
index bab86040a7b..e70eb2d46f8 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
@@ -10,5 +10,5 @@ test_neg (__ieee128 *p)
 {
   __ieee128 source = *p;
 
-  return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_qp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
index 822030bf737..4f7562b9c38 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (5, source);
+  return __builtin_dfp_dtstsfi_lt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index 044e7683cf1..c56a24e0db4 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_dd' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
index 350b4c10205..4b72fa8edc3 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
index cc54c6b265e..af07fbb4a01 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_lt_dd (63, source))
+  if (__builtin_dfp_dtstsfi_lt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
index 011d20039d0..6397aae3e56 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
index 54d2557fa2f..6f57baf0150 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (5, source);
+  return __builtin_dfp_dtstsfi_lt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
index 8626c579a25..c6a42f089e0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_td' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
index 28033dbac18..ea934ea4652 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
index 8ce9390feaf..28bc10c3145 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_lt_td (63, source))
+  if (__builtin_dfp_dtstsfi_lt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
index 092b9c0f7c5..b2073f56b05 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
index 6d8869e5435..ee098bcb999 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (5, source);
+  return __builtin_dfp_dtstsfi_gt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
index 439fcb2a548..5d9d5d61b42 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_dd' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
index d24f3982ee9..15d7a352fdf 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
index 6d978a09750..236f39393e0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_gt_dd (63, source))
+  if (__builtin_dfp_dtstsfi_gt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
index b6620c51f2a..f6ed00a73dd 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
index fdafaf9ceb8..1390c8381f8 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (5, source);
+  return __builtin_dfp_dtstsfi_gt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
index 822f6d57003..ca5e0098411 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_td' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
index dc4c8ecdd00..8e3954d6b93 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
index fce744cd916..a2b922955f6 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_gt_td (63, source))
+  if (__builtin_dfp_dtstsfi_gt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
index 1aee9efe919..f6c0ede46cc 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
index 25b35ed4bc9..4663fc653bb 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (5, source);
+  return __builtin_dfp_dtstsfi_eq (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
index e6b5fe5469e..5e4f4964aaa 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_dd' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
index c9431b5ea1a..fc6b3568d09 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
index d11f497b137..9c194374187 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_eq_dd (63, source))
+  if (__builtin_dfp_dtstsfi_eq (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
index 2fdb58f6748..b896865e6bb 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
index 912ae7f3492..5c6fcc4ec83 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (5, source);
+  return __builtin_dfp_dtstsfi_eq (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
index 218d2f64d3e..02ff47441e5 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_td' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
index 275bf8d0ac2..edfac68b0e8 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
index 0626d87d9be..9a94371da35 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_eq_td (63, source))
+  if (__builtin_dfp_dtstsfi_eq (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
index e1da3d810ef..e7b50dc108e 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
index 875354c9ab8..c584d988b4b 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (5, source);
+  return __builtin_dfp_dtstsfi_ov (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
index 68758cf535a..6c64021a479 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_dd' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
index 725cc5432b9..44aaab201f9 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
index f368c38204b..e7d2a27ecfd 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_ov_dd (63, source))
+  if (__builtin_dfp_dtstsfi_ov (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
index c6ffd51d9f4..fb3331162c7 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
index 910fb7d98c8..7c75265de08 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (5, source);
+  return __builtin_dfp_dtstsfi_ov (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
index d867a987df8..982ed5d79df 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_td' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
index d279bfb5751..59471cfb645 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
index 3034300f72b..1bda795b55a 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_ov_td (63, source))
+  if (__builtin_dfp_dtstsfi_ov (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
index b88b5a86bcb..c9e1721b3d6 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:17 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:17 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:f3e9d51bef93c1bcfd139823ea92adc589dcfab1

commit f3e9d51bef93c1bcfd139823ea92adc589dcfab1
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 6 15:06:45 2021 -0600

    rs6000: More bug fixes
    
    2021-01-06  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Fix arg access thinko.
            * config/rs6000/rs6000-overload-def (VEC_OR): Add missing forms.
            (VEC_VSCEUO): Fix typo.
    
    gcc/testsuite/
            * gcc.dg/vmx/ops.c: Remove bad srl and vec_v* forms.

Diff:
---
 gcc/config/rs6000/rs6000-c.c          |   2 +-
 gcc/config/rs6000/rs6000-overload.def |  52 +++++++++++++--
 gcc/testsuite/gcc.dg/vmx/ops.c        | 120 ----------------------------------
 3 files changed, 47 insertions(+), 127 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index c01470c51c0..96d20f8d601 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2902,7 +2902,7 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	gcc_assert (instance != NULL);
 	tree fntype = rs6000_builtin_info_x[instance->bifid].fntype;
 	tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
-	tree parmtype1 = TREE_VALUE (TREE_CHAIN (parmtype0));
+	tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
 
 	if (rs6000_new_builtin_type_compatible (types[0], parmtype0)
 	    && rs6000_new_builtin_type_compatible (types[1], parmtype1))
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 0876b8068bc..60a18a79416 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -2175,32 +2175,72 @@
 [VEC_OR, vec_or, __builtin_vec_or]
   vsc __builtin_vec_or (vsc, vsc);
     VOR_V16QI
+  vsc __builtin_vec_or (vsc, vbc);
+    VOR_V16QI  VOR_VSC_VBC
+  vsc __builtin_vec_or (vbc, vsc);
+    VOR_V16QI  VOR_VBC_VSC
   vuc __builtin_vec_or (vuc, vuc);
     VOR_V16QI_UNS  VOR_V16QI_U
   vbc __builtin_vec_or (vbc, vbc);
     VOR_V16QI_UNS  VOR_V16QI_B
+  vuc __builtin_vec_or (vuc, vbc);
+    VOR_V16QI_UNS  VOR_V16QI_UB
+  vuc __builtin_vec_or (vbc, vuc);
+    VOR_V16QI_UNS  VOR_V16QI_BU
   vss __builtin_vec_or (vss, vss);
     VOR_V8HI
+  vss __builtin_vec_or (vss, vbs);
+    VOR_V8HI  VOR_VSS_VBS
+  vss __builtin_vec_or (vbs, vss);
+    VOR_V8HI  VOR_VBS_VSS
   vus __builtin_vec_or (vus, vus);
     VOR_V8HI_UNS  VOR_V8HI_U
   vbs __builtin_vec_or (vbs, vbs);
     VOR_V8HI_UNS  VOR_V8HI_B
+  vus __builtin_vec_or (vus, vbs);
+    VOR_V8HI_UNS  VOR_V8HI_UB
+  vus __builtin_vec_or (vbs, vus);
+    VOR_V8HI_UNS  VOR_V8HI_BU
   vsi __builtin_vec_or (vsi, vsi);
     VOR_V4SI
+  vsi __builtin_vec_or (vsi, vbi);
+    VOR_V4SI  VOR_VSI_VBI
+  vsi __builtin_vec_or (vbi, vsi);
+    VOR_V4SI  VOR_VBI_VSI
   vui __builtin_vec_or (vui, vui);
     VOR_V4SI_UNS  VOR_V4SI_U
   vbi __builtin_vec_or (vbi, vbi);
     VOR_V4SI_UNS  VOR_V4SI_B
+  vui __builtin_vec_or (vui, vbi);
+    VOR_V4SI_UNS  VOR_V4SI_UB
+  vui __builtin_vec_or (vui, vbi);
+    VOR_V4SI_UNS  VOR_V4SI_BU
   vsll __builtin_vec_or (vsll, vsll);
     VOR_V2DI
+  vsll __builtin_vec_or (vsll, vbll);
+    VOR_V2DI  VOR_VSLL_VBLL
+  vsll __builtin_vec_or (vbll, vsll);
+    VOR_V2DI  VOR_VBLL_VSLL
   vull __builtin_vec_or (vull, vull);
     VOR_V2DI_UNS  VOR_V2DI_U
   vbll __builtin_vec_or (vbll, vbll);
     VOR_V2DI_UNS  VOR_V2DI_B
+  vull __builtin_vec_or (vull, vbll);
+    VOR_V2DI_UNS  VOR_V2DI_UB
+  vull __builtin_vec_or (vbll, vull);
+    VOR_V2DI_UNS  VOR_V2DI_BU
   vf __builtin_vec_or (vf, vf);
     VOR_V4SF
+  vf __builtin_vec_or (vf, vbi);
+    VOR_V4SF  VOR_VF_VBI
+  vf __builtin_vec_or (vbi, vf);
+    VOR_V4SF  VOR_VBI_VF
   vd __builtin_vec_or (vd, vd);
     VOR_V2DF
+  vd __builtin_vec_or (vd, vbll);
+    VOR_V2DF  VOR_VD_VBLL
+  vd __builtin_vec_or (vbll, vd);
+    VOR_V2DF  VOR_VBLL_VD
 
 [VEC_ORC, vec_orc, __builtin_vec_orc, _ARCH_PWR8]
   vsc __builtin_vec_orc (vsc, vsc);
@@ -3625,7 +3665,7 @@
   signed int __builtin_vec_scalar_cmp_exp_lt (_Float128, _Float128);
     VSCEQPLT
 
-[VEC_VSCEUO, scalar_cmp_exp_unordered, __builtin_vec_scalar_cmp_exp_unordered, ARCH_PWR9]
+[VEC_VSCEUO, scalar_cmp_exp_unordered, __builtin_vec_scalar_cmp_exp_unordered, _ARCH_PWR9]
   signed int __builtin_vec_scalar_cmp_exp_unordered (double, double);
     VSCEDPUO
   signed int __builtin_vec_scalar_cmp_exp_unordered (_Float128, _Float128);
@@ -3638,17 +3678,17 @@
     VSEEQP
 
 [VEC_VSES, scalar_extract_sig, __builtin_vec_scalar_extract_sig, _ARCH_PWR9]
-  unsigned int __builtin_vec_scalar_extract_sig (double);
+  unsigned long long __builtin_vec_scalar_extract_sig (double);
     VSESDP
-  unsigned int __builtin_vec_scalar_extract_sig (_Float128);
+  unsigned __int128 __builtin_vec_scalar_extract_sig (_Float128);
     VSESQP
 
 [VEC_VSIE, scalar_insert_exp, __builtin_vec_scalar_insert_exp, _ARCH_PWR9]
-  double __builtin_vec_scalar_insert_exp (unsigned int, unsigned int);
+  double __builtin_vec_scalar_insert_exp (unsigned long long, unsigned long long);
     VSIEDP
-  double __builtin_vec_scalar_insert_exp (double, unsigned int);
+  double __builtin_vec_scalar_insert_exp (double, unsigned long long);
     VSIEDPF
-  _Float128 __builtin_vec_scalar_insert_exp (unsigned long long, unsigned long long);
+  _Float128 __builtin_vec_scalar_insert_exp (unsigned __int128, unsigned long long);
     VSIEQP
   _Float128 __builtin_vec_scalar_insert_exp (_Float128, unsigned long long);
     VSIEQPF
diff --git a/gcc/testsuite/gcc.dg/vmx/ops.c b/gcc/testsuite/gcc.dg/vmx/ops.c
index 5ba559e6f4b..7b56e9d8afa 100644
--- a/gcc/testsuite/gcc.dg/vmx/ops.c
+++ b/gcc/testsuite/gcc.dg/vmx/ops.c
@@ -192,42 +192,8 @@ void f2() {
   *var_vec_b16++ = vec_splat(var_vec_b16[0], 7);
 }
 void f3() {
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u8[1]);
   *var_vec_b16++ = vec_unpackh(var_vec_b8[0]);
   *var_vec_b16++ = vec_unpackl(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vand(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vandc(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vcmpequh(var_vec_s16[0], var_vec_s16[1]);
-  *var_vec_b16++ = vec_vcmpequh(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vcmpgtsh(var_vec_s16[0], var_vec_s16[1]);
-  *var_vec_b16++ = vec_vcmpgtuh(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vmrghh(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vmrglh(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vnor(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vor(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vperm(var_vec_b16[0], var_vec_b16[1], var_vec_u8[2]);
-  *var_vec_b16++ = vec_vpkuwum(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b16++ = vec_vsel(var_vec_b16[0], var_vec_b16[1], var_vec_b16[2]);
-  *var_vec_b16++ = vec_vsel(var_vec_b16[0], var_vec_b16[1], var_vec_u16[2]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u8[1]);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 0);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 1);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 2);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 3);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 4);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 5);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 6);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 7);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u8[1]);
-  *var_vec_b16++ = vec_vupkhsb(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vupklsb(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vxor(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_xor(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b32++ = vec_and(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_andc(var_vec_b32[0], var_vec_b32[1]);
@@ -255,40 +221,8 @@ void f3() {
   *var_vec_b32++ = vec_splat(var_vec_b32[0], 3);
 }
 void f4() {
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u8[1]);
   *var_vec_b32++ = vec_unpackh(var_vec_b16[0]);
   *var_vec_b32++ = vec_unpackl(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vand(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vandc(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vcmpeqfp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpequw(var_vec_s32[0], var_vec_s32[1]);
-  *var_vec_b32++ = vec_vcmpequw(var_vec_u32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vcmpgefp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpgtfp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpgtsw(var_vec_s32[0], var_vec_s32[1]);
-  *var_vec_b32++ = vec_vcmpgtuw(var_vec_u32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vmrghw(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vmrglw(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vnor(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vor(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vperm(var_vec_b32[0], var_vec_b32[1], var_vec_u8[2]);
-  *var_vec_b32++ = vec_vsel(var_vec_b32[0], var_vec_b32[1], var_vec_b32[2]);
-  *var_vec_b32++ = vec_vsel(var_vec_b32[0], var_vec_b32[1], var_vec_u32[2]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u8[1]);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 0);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 1);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 2);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 3);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u8[1]);
-  *var_vec_b32++ = vec_vupkhsh(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vupklsh(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vxor(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_xor(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b8++ = vec_and(var_vec_b8[0], var_vec_b8[1]);
   *var_vec_b8++ = vec_andc(var_vec_b8[0], var_vec_b8[1]);
@@ -324,46 +258,6 @@ void f5() {
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 13);
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 14);
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 15);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vand(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vandc(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vcmpequb(var_vec_s8[0], var_vec_s8[1]);
-  *var_vec_b8++ = vec_vcmpequb(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vcmpgtsb(var_vec_s8[0], var_vec_s8[1]);
-  *var_vec_b8++ = vec_vcmpgtub(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vmrghb(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vmrglb(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vnor(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vor(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vperm(var_vec_b8[0], var_vec_b8[1], var_vec_u8[2]);
-  *var_vec_b8++ = vec_vpkuhum(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b8++ = vec_vsel(var_vec_b8[0], var_vec_b8[1], var_vec_b8[2]);
-  *var_vec_b8++ = vec_vsel(var_vec_b8[0], var_vec_b8[1], var_vec_u8[2]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 0);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 1);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 2);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 3);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 4);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 5);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 6);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 7);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 8);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 9);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 10);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 11);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 12);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 13);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 14);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 15);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vxor(var_vec_b8[0], var_vec_b8[1]);
   *var_vec_b8++ = vec_xor(var_vec_b8[0], var_vec_b8[1]);
 }
 void f6() {
@@ -525,8 +419,6 @@ void f9() {
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 5);
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 6);
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 7);
-  *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u16[1]);
-  *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u32[1]);
   *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u8[1]);
   *var_vec_p16++ = vec_sro(var_vec_p16[0], var_vec_s8[1]);
   *var_vec_p16++ = vec_sro(var_vec_p16[0], var_vec_u8[1]);
@@ -631,8 +523,6 @@ void f11() {
   *var_vec_s16++ = vec_splat_s16(-16);
   *var_vec_s16++ = vec_sr(var_vec_s16[0], var_vec_u16[1]);
   *var_vec_s16++ = vec_sra(var_vec_s16[0], var_vec_u16[1]);
-  *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u16[1]);
-  *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u32[1]);
   *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u8[1]);
   *var_vec_s16++ = vec_sro(var_vec_s16[0], var_vec_s8[1]);
   *var_vec_s16++ = vec_sro(var_vec_s16[0], var_vec_u8[1]);
@@ -771,8 +661,6 @@ void f14() {
 }
 void f15() {
   *var_vec_s32++ = vec_sra(var_vec_s32[0], var_vec_u32[1]);
-  *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u16[1]);
-  *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u32[1]);
   *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u8[1]);
   *var_vec_s32++ = vec_sro(var_vec_s32[0], var_vec_s8[1]);
   *var_vec_s32++ = vec_sro(var_vec_s32[0], var_vec_u8[1]);
@@ -891,8 +779,6 @@ void f18() {
   *var_vec_s8++ = vec_splat_s8(-16);
   *var_vec_s8++ = vec_sr(var_vec_s8[0], var_vec_u8[1]);
   *var_vec_s8++ = vec_sra(var_vec_s8[0], var_vec_u8[1]);
-  *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u16[1]);
-  *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u32[1]);
   *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u8[1]);
   *var_vec_s8++ = vec_sro(var_vec_s8[0], var_vec_s8[1]);
   *var_vec_s8++ = vec_sro(var_vec_s8[0], var_vec_u8[1]);
@@ -1002,8 +888,6 @@ void f21() {
   *var_vec_u16++ = vec_splat_u16(-16);
   *var_vec_u16++ = vec_sr(var_vec_u16[0], var_vec_u16[1]);
   *var_vec_u16++ = vec_sra(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u32[1]);
   *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u8[1]);
   *var_vec_u16++ = vec_sro(var_vec_u16[0], var_vec_s8[1]);
   *var_vec_u16++ = vec_sro(var_vec_u16[0], var_vec_u8[1]);
@@ -1140,8 +1024,6 @@ void f23() {
   *var_vec_u32++ = vec_sra(var_vec_u32[0], var_vec_u32[1]);
 }
 void f24() {
-  *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u16[1]);
-  *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u32[1]);
   *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u8[1]);
   *var_vec_u32++ = vec_sro(var_vec_u32[0], var_vec_s8[1]);
   *var_vec_u32++ = vec_sro(var_vec_u32[0], var_vec_u8[1]);
@@ -1274,8 +1156,6 @@ void f27() {
   *var_vec_u8++ = vec_splat_u8(-16);
   *var_vec_u8++ = vec_sr(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_sra(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u16[1]);
-  *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u32[1]);
   *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_sro(var_vec_u8[0], var_vec_s8[1]);
   *var_vec_u8++ = vec_sro(var_vec_u8[0], var_vec_u8[1]);


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 18:16 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 18:16 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:e5040567804004f3bd8a63baec683fa7ca489d1c

commit e5040567804004f3bd8a63baec683fa7ca489d1c
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Dec 17 16:25:22 2020 -0600

    rs6000: More bug fixes
    
    2020-12-17  Bill Schmidt  <wschmidt@linux.ibm.com>
    
            * config/rs6000/rs6000-builtin-new.def (LVEBX): Fix return type.
            (LVEHX): Likewise.
            (LVEWX): Likeiwse.
            * config/rs6000/rs6000-gen-builtins.c (construct_fntype_id): Don't
            use "ci" for pointers.
            * config/rs6000/rs6000-overload.def (VEC_CMPEQ): Use Altivec
            forms, not VSX forms, for now.
            (VEC_CMPEQ_P): Likewise.
            (VEC_CMPGE): Likewise.
            (VEC_CMPGE_P): Likewise.
            (VEC_CMPGT): Likewise.
            (VEC_CMPGT_P): Likewise.
            (VEC_NMSUB): Likewise.
            (VEC_RE): Likewise.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def |  6 +++---
 gcc/config/rs6000/rs6000-gen-builtins.c  |  5 ++++-
 gcc/config/rs6000/rs6000-overload.def    | 27 +++++++++++++++++++--------
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 3ca7ccab705..8b54b17e1ce 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -306,13 +306,13 @@
   fpmath vf __builtin_altivec_float_sisf (vsi);
     FLOAT_V4SI_V4SF floatv4siv4sf2 {}
 
-  pure vop __builtin_altivec_lvebx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvebx (signed long long, const void *);
     LVEBX altivec_lvebx {ldvec}
 
-  pure vop __builtin_altivec_lvehx (signed long long, const void *);
+  pure vss __builtin_altivec_lvehx (signed long long, const void *);
     LVEHX altivec_lvehx {ldvec}
 
-  pure vop __builtin_altivec_lvewx (signed long long, const void *);
+  pure vsi __builtin_altivec_lvewx (signed long long, const void *);
     LVEWX altivec_lvewx {ldvec}
 
   pure vuc __builtin_altivec_lvsl (signed long long, const void *);
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 57095dde58a..a4495e0c443 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -930,6 +930,7 @@ match_type (typeinfo *typedata, int voidok)
 
        [const] [[signed|unsigned] <basetype> | <vectype>] [*]
 
+       #### Lie below ####
      where "const" applies only to a <basetype> of "int".  Legal values
      of <basetype> are (for now):
 
@@ -1577,7 +1578,9 @@ construct_fntype_id (prototype *protoptr)
 	{
 	  assert (argptr);
 	  buf[bufi++] = '_';
-	  if (argptr->info.isconst && argptr->info.base == BT_INT)
+	  if (argptr->info.isconst
+	      && argptr->info.base == BT_INT
+	      && !argptr->info.ispointer)
 	    {
 	      buf[bufi++] = 'c';
 	      buf[bufi++] = 'i';
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 2109c6ccb56..981e2fe944b 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -456,6 +456,7 @@
     VCMPBFP
 
 [VEC_CMPEQ, vec_cmpeq, __builtin_vec_cmpeq]
+; #### XVCMPEQSP{TARGET_VSX};VCMPEQFP
   vbc __builtin_vec_cmpeq (vsc, vsc);
     VCMPEQUB  VCMPEQUB_VSC
   vbc __builtin_vec_cmpeq (vuc, vuc);
@@ -481,12 +482,13 @@
   vbll __builtin_vec_cmpeq (vbll, vbll);
     VCMPEQUD  VCMPEQUD_VBLL
   vbi __builtin_vec_cmpeq (vf, vf);
-    XVCMPEQSP
+    VCMPEQFP
   vbll __builtin_vec_cmpeq (vd, vd);
     XVCMPEQDP
 
 ; We skip generating a #define because of the C-versus-C++ complexity
 ; in altivec.h.  Look there for the template-y details.
+; #### XVCMPEQSP_P{TARGET_VSX};VCMPEQFP_P
 [VEC_CMPEQ_P, SKIP, __builtin_vec_vcmpeq_p]
   signed int __builtin_vec_vcmpeq_p (signed int, vuc, vuc);
     VCMPEQUB_P  VCMPEQUB_PU
@@ -515,7 +517,7 @@
   signed int __builtin_vec_vcmpeq_p (signed int, vbll, vbll);
     VCMPEQUD_P  VCMPEQUD_PB
   signed int __builtin_vec_vcmpeq_p (signed int, vf, vf);
-    XVCMPEQSP_P
+    VCMPEQFP_P
   signed int __builtin_vec_vcmpeq_p (signed int, vd, vd);
     XVCMPEQDP_P
 
@@ -523,6 +525,7 @@
   signed int __builtin_byte_in_set (unsigned char,  unsigned long long);
     CMPEQB
 
+; #### XVCMPGESP{TARGET_VSX};VCMPGEFP
 [VEC_CMPGE, vec_cmpge, __builtin_vec_cmpge]
   vbc __builtin_vec_cmpge (vsc, vsc);
     CMPGE_16QI  CMPGE_16QI_VSC
@@ -541,7 +544,7 @@
   vbll __builtin_vec_cmpge (vull, vull);
     CMPGE_2DI  CMPGE_2DI_VULL
   vbi __builtin_vec_cmpge (vf, vf);
-    XVCMPGESP
+    VCMPGEFP
   vbll __builtin_vec_cmpge (vd, vd);
     XVCMPGEDP
 
@@ -549,6 +552,7 @@
 ; in altivec.h.  Look there for the template-y details.
 ; See altivec_build_resolved_builtin for how we deal with VEC_CMPGE_P.
 ; It's quite strange and horrible!
+; #### XVCMPGESP_P{TARGET_VSX};VCMPGEFP_P
 [VEC_CMPGE_P, SKIP, __builtin_vec_vcmpge_p]
   signed int __builtin_vec_vcmpge_p (signed int, vuc, vuc);
     VCMPGTUB_P  VCMPGTUB_PR
@@ -567,10 +571,11 @@
   signed int __builtin_vec_vcmpge_p (signed int, vsll, vsll);
     VCMPGTSD_P  VCMPGTSD_PR
   signed int __builtin_vec_vcmpge_p (signed int, vf, vf);
-    XVCMPGESP_P
+    VCMPGEFP_P
   signed int __builtin_vec_vcmpge_p (signed int, vd, vd);
     XVCMPGEDP_P
 
+; #### XVCMPGTSP{TARGET_VSX};VCMPGTFP
 [VEC_CMPGT, vec_cmpgt, __builtin_vec_cmpgt]
   vbc __builtin_vec_cmpgt (vsc, vsc);
     VCMPGTSB
@@ -589,12 +594,13 @@
   vbll __builtin_vec_cmpgt (vull, vull);
     VCMPGTUD
   vbi __builtin_vec_cmpgt (vf, vf);
-    XVCMPGTSP
+    VCMPGTFP
   vbll __builtin_vec_cmpgt (vd, vd);
     XVCMPGTDP
 
 ; We skip generating a #define because of the C-versus-C++ complexity
 ; in altivec.h.  Look there for the template-y details.
+; #### XVCMPGTSP_P{TARGET_VSX};VCMPGTFP_P
 [VEC_CMPGT_P, SKIP, __builtin_vec_vcmpgt_p]
   signed int __builtin_vec_vcmpgt_p (signed int, vuc, vuc);
     VCMPGTUB_P
@@ -613,7 +619,7 @@
   signed int __builtin_vec_vcmpgt_p (signed int, vsll, vsll);
     VCMPGTSD_P
   signed int __builtin_vec_vcmpgt_p (signed int, vf, vf);
-    XVCMPGTSP_P
+    VCMPGTFP_P
   signed int __builtin_vec_vcmpgt_p (signed int, vd, vd);
     XVCMPGTDP_P
 
@@ -2084,9 +2090,10 @@
   vd __builtin_vec_nmadd (vd, vd, vd);
     XVNMADDDP
 
+; #### XVNMSUBDP{TARGET_VSX};VNMSUBFP
 [VEC_NMSUB, vec_nmsub, __builtin_vec_nmsub]
   vf __builtin_vec_nmsub (vf, vf, vf);
-    XVNMSUBSP
+    VNMSUBFP
   vd __builtin_vec_nmsub (vd, vd, vd);
     XVNMSUBDP
 
@@ -2354,9 +2361,13 @@
   vsi __builtin_vec_promote (vsi);
     ABS_V4SI PROMOTE_FAKERY
 
+; Opportunity for improvement: We can use XVRESP instead of VREFP for
+; TARGET_VSX.  We would need conditional dispatch to allow two possibilities.
+; Some syntax like "XVRESP{TARGET_VSX};VREFP".
+; TODO. ####
 [VEC_RE, vec_re, __builtin_vec_re]
   vf __builtin_vec_re (vf);
-    XVRESP
+    VREFP
   vd __builtin_vec_re (vd);
     XVREDP


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-07 17:48 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-07 17:48 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:906a91028d5862497ca6957353c2ee8ffded5aad

commit 906a91028d5862497ca6957353c2ee8ffded5aad
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Sun Feb 7 11:48:07 2021 -0600

    rs6000: More bug fixes
    
    2021-02-07  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Clean up.
            * config/rs6000/rs6000-gen-builtins.c (write_init_file): Remove
            timevar stuff.
            * timevar.def (TV_BILL): Remove.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def | 8 --------
 gcc/config/rs6000/rs6000-gen-builtins.c  | 3 ---
 gcc/timevar.def                          | 3 ---
 3 files changed, 14 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 24fd7ed182d..5e63df13516 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1735,12 +1735,8 @@
   const vd __builtin_vsx_xvcvsxwdp (vsi);
     XVCVSXWDP vsx_xvcvsxwdp {}
 
-; Need to pick one or the other here!!  ####
-; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvsxwsp (vsi);
     XVCVSXWSP vsx_floatv4siv4sf2 {}
-;  const vf __builtin_vsx_xvcvsxwsp (vsi);
-;    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
 
   const vd __builtin_vsx_xvcvuxddp (vull);
     XVCVUXDDP vsx_floatunsv2div2df2 {}
@@ -1758,12 +1754,8 @@
   const vd __builtin_vsx_xvcvuxwdp (vsi);
     XVCVUXWDP vsx_xvcvuxwdp {}
 
-; Need to pick one or the other here!! ####
-; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvuxwsp (vui);
     XVCVUXWSP vsx_floatunsv4siv4sf2 {}
-;  const vf __builtin_vsx_xvcvuxwsp (vui);
-;    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
 
   fpmath vd __builtin_vsx_xvdivdp (vd, vd);
     XVDIVDP divv2df3 {}
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index b75b29303dd..07222228310 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -2691,7 +2691,6 @@ write_init_file ()
   fprintf (init_file, "#include \"tree.h\"\n");
   fprintf (init_file, "#include \"langhooks.h\"\n");
   fprintf (init_file, "#include \"insn-codes.h\"\n");
-  fprintf (init_file, "#include \"timevar.h\"\n");
   fprintf (init_file, "#include \"rs6000-builtins.h\"\n");
   fprintf (init_file, "\n");
 
@@ -2715,7 +2714,6 @@ write_init_file ()
   fprintf (init_file, "rs6000_autoinit_builtins ()\n");
   fprintf (init_file, "{\n");
   fprintf (init_file, "  tree t;\n");
-  fprintf (init_file, "  timevar_start (TV_BILL);\n");
   rbt_inorder_callback (&fntype_rbt, fntype_rbt.rbt_root, write_fntype_init);
   fprintf (init_file, "\n");
 
@@ -2729,7 +2727,6 @@ write_init_file ()
   write_init_bif_table ();
   write_init_ovld_table ();
 
-  fprintf (init_file, "  timevar_stop (TV_BILL);\n");
   fprintf (init_file, "}\n\n");
 
   fprintf (init_file,
diff --git a/gcc/timevar.def b/gcc/timevar.def
index 371b831449c..1f85e2db558 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -340,6 +340,3 @@ DEFTIMEVAR (TV_ANALYZER_WORKLIST     , "analyzer: processing worklist")
 DEFTIMEVAR (TV_ANALYZER_DUMP         , "analyzer: dump")
 DEFTIMEVAR (TV_ANALYZER_DIAGNOSTICS  , "analyzer: emitting diagnostics")
 DEFTIMEVAR (TV_ANALYZER_SHORTEST_PATHS, "analyzer: shortest paths")
-
-/* Bill's timevar!  */
-DEFTIMEVAR (TV_BILL, "builtin initialization")


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-02-01  0:34 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-02-01  0:34 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:57d39f823dcf59d28b7badf42431fdaadcf7e91a

commit 57d39f823dcf59d28b7badf42431fdaadcf7e91a
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Sun Jan 31 18:34:34 2021 -0600

    rs6000: More bug fixes
    
    2021-01-31  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Update deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/vec-gnb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-all-nez-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-any-eqz-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cmpnez-7.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Adjust.
            * gcc.target/powerpc/vsu/vec-xst-len-12.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        | 16 +++++++------
 gcc/config/rs6000/rs6000-builtin-new.def           | 26 ++++++++++----------
 gcc/config/rs6000/rs6000-overload.def              | 28 ++++++++++++++--------
 gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c       |  2 +-
 .../gcc.target/powerpc/vsu/vec-all-nez-7.c         |  2 +-
 .../gcc.target/powerpc/vsu/vec-any-eqz-7.c         |  2 +-
 .../gcc.target/powerpc/vsu/vec-cmpnez-7.c          |  2 +-
 .../gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c      |  2 +-
 .../gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c      |  2 +-
 .../gcc.target/powerpc/vsu/vec-xst-len-12.c        |  2 +-
 10 files changed, 47 insertions(+), 37 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index c68e854f30f..3d6f259fa1e 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -58,18 +58,20 @@
 #include "rs6000-vecdefines.h"
 
 /* Deprecated interfaces.  */
-#define vec_vsld vec_sld
-#define vec_vsrad vec_srad
-#define vec_vsrd vec_srd
+#ifdef _ARCH_PWR8
+#define vec_vsld vec_sl
+#define vec_vsrd vec_sr
+#define vec_vsrad vec_sra
+#endif
 
 #ifdef _ARCH_PWR9
 #define __builtin_vec_vadub __builtin_vec_vadu
 #define __builtin_vec_vaduh __builtin_vec_vadu
 #define __builtin_vec_vaduw __builtin_vec_vadu
-#define __builtin_vec_vprtybw __builtin_vec_vprtyb
-#define __builtin_vec_vprtybd __builtin_vec_vprtyb
-#define __builtin_vec_vprtybq __builtin_vec_vprtyb
-#define vec_vrlnm vec_rlnm
+#define vec_vprtybw vec_vprtyb
+#define vec_vprtybd vec_vprtyb
+#define vec_vprtybq vec_vprtyb
+#define vec_vrlnm __builtin_vec_rlnm
 #endif
 
 /* Synonyms.  */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 84654e872e0..24fd7ed182d 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1647,37 +1647,37 @@
   fpmath vf __builtin_vsx_xvaddsp (vf, vf);
     XVADDSP addv4sf3 {}
 
-  const vbll __builtin_vsx_xvcmpeqdp (vd, vd);
+  const vd __builtin_vsx_xvcmpeqdp (vd, vd);
     XVCMPEQDP vector_eqv2df {}
 
   const signed int __builtin_vsx_xvcmpeqdp_p (signed int, vd, vd);
     XVCMPEQDP_P vector_eq_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpeqsp (vf, vf);
+  const vf __builtin_vsx_xvcmpeqsp (vf, vf);
     XVCMPEQSP vector_eqv4sf {}
 
   const signed int __builtin_vsx_xvcmpeqsp_p (signed int, vf, vf);
     XVCMPEQSP_P vector_eq_v4sf_p {pred}
 
-  const vbll __builtin_vsx_xvcmpgedp (vd, vd);
+  const vd __builtin_vsx_xvcmpgedp (vd, vd);
     XVCMPGEDP vector_gev2df {}
 
   const signed int __builtin_vsx_xvcmpgedp_p (signed int, vd, vd);
     XVCMPGEDP_P vector_ge_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpgesp (vf, vf);
+  const vf __builtin_vsx_xvcmpgesp (vf, vf);
     XVCMPGESP vector_gev4sf {}
 
   const signed int __builtin_vsx_xvcmpgesp_p (signed int, vf, vf);
     XVCMPGESP_P vector_ge_v4sf_p {pred}
 
-  const vbll __builtin_vsx_xvcmpgtdp (vd, vd);
+  const vd __builtin_vsx_xvcmpgtdp (vd, vd);
     XVCMPGTDP vector_gtv2df {}
 
   const signed int __builtin_vsx_xvcmpgtdp_p (signed int, vd, vd);
     XVCMPGTDP_P vector_gt_v2df_p {pred}
 
-  const vbi __builtin_vsx_xvcmpgtsp (vf, vf);
+  const vf __builtin_vsx_xvcmpgtsp (vf, vf);
     XVCMPGTSP vector_gtv4sf {}
 
   const signed int __builtin_vsx_xvcmpgtsp_p (signed int, vf, vf);
@@ -1927,25 +1927,25 @@
   const vsi __builtin_vsx_xxmrglw_4si (vsi, vsi);
     XXMRGLW_4SI vsx_xxmrglw_v4si {}
 
-  const vsc __builtin_vsx_xxpermdi_16qi (vsc, vsc, const int<1>);
+  const vsc __builtin_vsx_xxpermdi_16qi (vsc, vsc, const int<2>);
     XXPERMDI_16QI vsx_xxpermdi_v16qi {}
 
-  const vsq __builtin_vsx_xxpermdi_1ti (vsq, vsq, const int<1>);
+  const vsq __builtin_vsx_xxpermdi_1ti (vsq, vsq, const int<2>);
     XXPERMDI_1TI vsx_xxpermdi_v1ti {}
 
-  const vd __builtin_vsx_xxpermdi_2df (vd, vd, const int<1>);
+  const vd __builtin_vsx_xxpermdi_2df (vd, vd, const int<2>);
     XXPERMDI_2DF vsx_xxpermdi_v2df {}
 
-  const vsll __builtin_vsx_xxpermdi_2di (vsll, vsll, const int<1>);
+  const vsll __builtin_vsx_xxpermdi_2di (vsll, vsll, const int<2>);
     XXPERMDI_2DI vsx_xxpermdi_v2di {}
 
-  const vf __builtin_vsx_xxpermdi_4sf (vf, vf, const int<1>);
+  const vf __builtin_vsx_xxpermdi_4sf (vf, vf, const int<2>);
     XXPERMDI_4SF vsx_xxpermdi_v4sf {}
 
-  const vsi __builtin_vsx_xxpermdi_4si (vsi, vsi, const int<1>);
+  const vsi __builtin_vsx_xxpermdi_4si (vsi, vsi, const int<2>);
     XXPERMDI_4SI vsx_xxpermdi_v4si {}
 
-  const vss __builtin_vsx_xxpermdi_8hi (vss, vss, const int<1>);
+  const vss __builtin_vsx_xxpermdi_8hi (vss, vss, const int<2>);
     XXPERMDI_8HI vsx_xxpermdi_v8hi {}
 
   const vsc __builtin_vsx_xxsel_16qi (vsc, vsc, vsc);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index a2651e59c9f..90d17ee90e1 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -992,7 +992,7 @@
   signed int __builtin_vec_vcmpne_p (signed int, vbll, vsll);
     VCMPNED_P  VCMPNED_P_SB
 
-[VEC_CMPNEZ, vec_cmpnez, __builtin_vec_cmpnez, _ARCH_PWR9]
+[VEC_CMPNEZ, vec_cmpnez, __builtin_vec_vcmpnez, _ARCH_PWR9]
   vbc __builtin_vec_cmpnez (vsc, vsc);
     CMPNEZB  CMPNEZB_S
   vbc __builtin_vec_cmpnez (vuc, vuc);
@@ -1654,19 +1654,19 @@
     MTVSRBM
 
 [VEC_GENHM, vec_genhm, __builtin_vec_mtvsrhm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrhm (unsigned long long);
+  vus __builtin_vec_mtvsrhm (unsigned long long);
     MTVSRHM
 
 [VEC_GENWM, vec_genwm, __builtin_vec_mtvsrwm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrwm (unsigned long long);
+  vui __builtin_vec_mtvsrwm (unsigned long long);
     MTVSRWM
 
 [VEC_GENDM, vec_gendm, __builtin_vec_mtvsrdm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrdm (unsigned long long);
+  vull __builtin_vec_mtvsrdm (unsigned long long);
     MTVSRDM
 
 [VEC_GENQM, vec_genqm, __builtin_vec_mtvsrqm, _ARCH_PWR10]
-  vuc __builtin_vec_mtvsrqm (unsigned long long);
+  vuq __builtin_vec_mtvsrqm (unsigned long long);
     MTVSRQM
 
 [VEC_GENPCVM, vec_genpcvm, __builtin_vec_xxgenpcvm, _ARCH_PWR10]
@@ -3462,7 +3462,7 @@
   vf __builtin_vec_xxspltiw (float);
     VXXSPLTIW_V4SF
 
-[VEC_SPLATID, vec_splatid, __builtin_vec_xxspltid, ARCH_PWR10]
+[VEC_SPLATID, vec_splatid, __builtin_vec_xxspltid, _ARCH_PWR10]
   vd __builtin_vec_xxspltid (float);
     VXXSPLTIDP
 
@@ -4417,6 +4417,8 @@
     LXVW4X_V16QI  LXVW4X_VUC
   vuc __builtin_vec_vsx_ld (signed long long, const unsigned char *);
     LXVW4X_V16QI  LXVW4X_UC
+  vbc __builtin_vec_vsx_ld (signed long long, const vbc *);
+    LXVW4X_V16QI  LXVW4X_VBC
   vss __builtin_vec_vsx_ld (signed long long, const vss *);
     LXVW4X_V8HI  LXVW4X_VSS
   vss __builtin_vec_vsx_ld (signed long long, const signed short *);
@@ -4425,6 +4427,8 @@
     LXVW4X_V8HI  LXVW4X_VUS
   vus __builtin_vec_vsx_ld (signed long long, const unsigned short *);
     LXVW4X_V8HI  LXVW4X_US
+  vbs __builtin_vec_vsx_ld (signed long long, const vbs *);
+    LXVW4X_V8HI  LXVW4X_VBS
   vp __builtin_vec_vsx_ld (signed long long, const vp *);
     LXVW4X_V8HI  LXVW4X_P
   vsi __builtin_vec_vsx_ld (signed long long, const vsi *);
@@ -4435,6 +4439,8 @@
     LXVW4X_V4SI  LXVW4X_VUI
   vui __builtin_vec_vsx_ld (signed long long, const unsigned int *);
     LXVW4X_V4SI  LXVW4X_UI
+  vbi __builtin_vec_vsx_ld (signed long long, const vbi *);
+    LXVW4X_V4SI  LXVW4X_VBI
   vsll __builtin_vec_vsx_ld (signed long long, const vsll *);
     LXVD2X_V2DI  LXVD2X_VSLL
   vsll __builtin_vec_vsx_ld (signed long long, const signed long long *);
@@ -4443,6 +4449,8 @@
     LXVD2X_V2DI  LXVD2X_VULL
   vull __builtin_vec_vsx_ld (signed long long, const unsigned long long *);
     LXVD2X_V2DI  LXVD2X_ULL
+  vbll __builtin_vec_vsx_ld (signed long long, const vbll *);
+    LXVD2X_V2DI  LXVD2X_VBLL
   vsq __builtin_vec_vsx_ld (signed long long, const vsq *);
     LXVD2X_V1TI  LXVD2X_VSQ
   vsq __builtin_vec_vsx_ld (signed long long, const signed __int128 *);
@@ -4519,13 +4527,13 @@
     SE_LXVRDX
 
 [VEC_XL_ZEXT, vec_xl_zext, __builtin_vec_xl_zext, _ARCH_PWR10]
-  vsq __builtin_vec_xl_zext (signed long long, const signed char *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned char *);
     ZE_LXVRBX
-  vsq __builtin_vec_xl_zext (signed long long, const signed short *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned short *);
     ZE_LXVRHX
-  vsq __builtin_vec_xl_zext (signed long long, const signed int *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned int *);
     ZE_LXVRWX
-  vsq __builtin_vec_xl_zext (signed long long, const signed long long *);
+  vuq __builtin_vec_xl_zext (signed long long, const unsigned long long *);
     ZE_LXVRDX
 
 [VEC_XOR, vec_xor, __builtin_vec_xor]
diff --git a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
index 895bb953b37..4e59cbffa17 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
@@ -20,7 +20,7 @@ do_vec_gnb (vector unsigned __int128 source, int stride)
     case 5:
       return vec_gnb (source, 1);	/* { dg-error "between 2 and 7" } */
     case 6:
-      return vec_gnb (source, stride);	/* { dg-error "unsigned literal" } */
+      return vec_gnb (source, stride);	/* { dg-error "literal" } */
     case 7:
       return vec_gnb (source, 7);
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
index f53c6dca0a9..d1ef054b488 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
@@ -12,5 +12,5 @@ test_all_not_equal_and_not_zero (vector unsigned short *arg1_p,
   vector unsigned short arg_2 = *arg2_p;
 
   return __builtin_vec_vcmpnez_p (__CR6_LT, arg_1, arg_2);
-  /* { dg-error "'__builtin_altivec_vcmpnezh_p' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezh_p' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
index 757acd93110..b5cdea5fb3e 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
@@ -11,5 +11,5 @@ test_any_equal (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
   vector unsigned int arg_2 = *arg2_p;
 
   return __builtin_vec_vcmpnez_p (__CR6_LT_REV, arg_1, arg_2);
-  /* { dg-error "'__builtin_altivec_vcmpnezw_p' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezw_p' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
index 811b32f1c32..320421e6028 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
@@ -10,5 +10,5 @@ fetch_data (vector unsigned int *arg1_p, vector unsigned int *arg2_p)
   vector unsigned int arg_1 = *arg1_p;
   vector unsigned int arg_2 = *arg2_p;
 
-  return __builtin_vec_vcmpnez (arg_1, arg_2);	/* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vcmpnez (arg_1, arg_2);	/* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
index 6ee066d1eff..251285536c2 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
@@ -9,5 +9,5 @@ count_leading_zero_byte_bits (vector unsigned char *arg1_p)
 {
   vector unsigned char arg_1 = *arg1_p;
 
-  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vclzlsbb_v16qi' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vclzlsbb_v16qi' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
index ecd0add70d0..83ca92daced 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
@@ -9,5 +9,5 @@ count_trailing_zero_byte_bits (vector unsigned char *arg1_p)
 {
   vector unsigned char arg_1 = *arg1_p;
 
-  return __builtin_vec_vctzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vctzlsbb_v16qi' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vctzlsbb (arg_1);	/* { dg-error "'__builtin_altivec_vctzlsbb_v16qi' requires the '-mpower9-vector' option" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
index 3a51132a5a2..f30d49cb4cc 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
@@ -13,5 +13,5 @@ store_data (vector double *datap, double *address, size_t length)
 {
   vector double data = *datap;
 
-  __builtin_vec_stxvl (data, address, length); /* { dg-error "'__builtin_vec_stxvl' is not supported in this compiler configuration" } */
+  __builtin_vec_stxvl (data, address, length); /* { dg-error "'__builtin_altivec_stxvl' requires the" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-28 23:21 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-28 23:21 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:fa6a1a08419013e7c541ecd3102480e6c49f2a4e

commit fa6a1a08419013e7c541ecd3102480e6c49f2a4e
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 28 17:21:38 2021 -0600

    rs6000: More bug fixes
    
    2021-01-28  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Add deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def (__builtin_altivec_vgnb):
            Fix prototype.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/p9-vparity.c: Revert earlier changes.

Diff:
---
 gcc/config/rs6000/altivec.h                   | 22 ++++++++++++------
 gcc/config/rs6000/rs6000-builtin-new.def      |  2 +-
 gcc/config/rs6000/rs6000-overload.def         | 24 ++++++++++++++++++--
 gcc/testsuite/gcc.target/powerpc/p9-vparity.c | 32 +++++++++++++--------------
 4 files changed, 54 insertions(+), 26 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 312e5657623..c68e854f30f 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -57,6 +57,21 @@
 
 #include "rs6000-vecdefines.h"
 
+/* Deprecated interfaces.  */
+#define vec_vsld vec_sld
+#define vec_vsrad vec_srad
+#define vec_vsrd vec_srd
+
+#ifdef _ARCH_PWR9
+#define __builtin_vec_vadub __builtin_vec_vadu
+#define __builtin_vec_vaduh __builtin_vec_vadu
+#define __builtin_vec_vaduw __builtin_vec_vadu
+#define __builtin_vec_vprtybw __builtin_vec_vprtyb
+#define __builtin_vec_vprtybd __builtin_vec_vprtyb
+#define __builtin_vec_vprtybq __builtin_vec_vprtyb
+#define vec_vrlnm vec_rlnm
+#endif
+
 /* Synonyms.  */
 /* Functions that are resolved by the backend to one of the
    typed builtins.  */
@@ -264,11 +279,4 @@ __altivec_scalar_pred(vec_any_nle,
    to #define vec_step to __builtin_vec_step.  */
 #define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
 
-/* Deprecated interfaces.  */
-#ifdef _ARCH_PWR9
-#define __builtin_vec_vadub __builtin_vec_vadu
-#define __builtin_vec_vaduh __builtin_vec_vadu
-#define __builtin_vec_vaduw __builtin_vec_vadu
-#endif
-
 #endif /* _ALTIVEC_H */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 417fd2a35dd..84654e872e0 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -3183,7 +3183,7 @@
   const signed int __builtin_altivec_vextractmw (vui);
     VEXTRACTMW vec_extract_v4si {}
 
-  const unsigned long long __builtin_altivec_vgnb (vuq, const int <2,7>);
+  const unsigned long long __builtin_altivec_vgnb (vull, const int <2,7>);
     VGNB vgnb {}
 
   const vuc __builtin_altivec_vinsgubvlx (unsigned int, vuc, unsigned int);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 344c78b6a83..a2651e59c9f 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3071,7 +3071,7 @@
   vull __builtin_vec_rl (vull, vull);
     VRLD  VRLD_VULL
 
-[VEC_RLMI, vec_rlmi, __builtin_vec_rlmi]
+[VEC_RLMI, vec_rlmi, __builtin_vec_rlmi, _ARCH_PWR9]
   vui __builtin_vec_rlmi (vui, vui, vui);
     VRLWMI
   vull __builtin_vec_rlmi (vull, vull, vull);
@@ -3079,7 +3079,7 @@
 
 ; We SKIP vec_rlnm so that altivec.h can define it as the three-operand
 ; form we expose to the users.
-[VEC_RLNM, SKIP, __builtin_vec_rlnm]
+[VEC_RLNM, SKIP, __builtin_vec_rlnm, _ARCH_PWR9]
   vui __builtin_vec_rlnm (vui, vui);
     VRLWNM
   vull __builtin_vec_rlnm (vull, vull);
@@ -4320,6 +4320,26 @@
   vd __builtin_vec_insert_exp (vull, vull);
     VIEDP  VIEDP_VULL
 
+; It is truly unfortunate that vec_vprtyb has an incompatible set of
+; interfaces with vec_parity_lsbb.  So we can't even deprecate this.
+[VEC_VPRTYB, vec_vprtyb, __builtin_vec_vprtyb, _ARCH_PWR9]
+  vsi __builtin_vec_vprtyb (vsi);
+    VPRTYBW  VPRTYB_VSI
+  vui __builtin_vec_vprtyb (vui);
+    VPRTYBW  VPRTYB_VUI
+  vsll __builtin_vec_vprtyb (vsll);
+    VPRTYBD  VPRTYB_VSLL
+  vull __builtin_vec_vprtyb (vull);
+    VPRTYBD  VPRTYB_VULL
+  vsq __builtin_vec_vprtyb (vsq);
+    VPRTYBQ  VPRTYB_VSQ
+  vuq __builtin_vec_vprtyb (vuq);
+    VPRTYBQ  VPRTYB_VUQ
+  signed __int128 __builtin_vec_vprtyb (signed __int128);
+    VPRTYBQ  VPRTYB_SQ
+  unsigned __int128 __builtin_vec_vprtyb (unsigned __int128);
+    VPRTYBQ  VPRTYB_UQ
+
 [VEC_VSCEEQ, scalar_cmp_exp_eq, __builtin_vec_scalar_cmp_exp_eq, _ARCH_PWR9]
   signed int __builtin_vec_scalar_cmp_exp_eq (double, double);
     VSCEDPEQ
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
index 8897a5b6b7f..f4aba1567cd 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
@@ -9,97 +9,97 @@
 vector int
 parity_v4si_1s (vector int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector int
 parity_v4si_2s (vector int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybw (a);
 }
 
 vector unsigned int
 parity_v4si_1u (vector unsigned int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector unsigned int
 parity_v4si_2u (vector unsigned int a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybw (a);
 }
 
 vector long long
 parity_v2di_1s (vector long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector long long
 parity_v2di_2s (vector long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybd (a);
 }
 
 vector unsigned long long
 parity_v2di_1u (vector unsigned long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector unsigned long long
 parity_v2di_2u (vector unsigned long long a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybd (a);
 }
 
 vector __int128_t
 parity_v1ti_1s (vector __int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector __int128_t
 parity_v1ti_2s (vector __int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 __int128_t
 parity_ti_3s (__int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 __int128_t
 parity_ti_4s (__int128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 vector __uint128_t
 parity_v1ti_1u (vector __uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 vector __uint128_t
 parity_v1ti_2u (vector __uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 __uint128_t
 parity_ti_3u (__uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtyb (a);
 }
 
 __uint128_t
 parity_ti_4u (__uint128_t a)
 {
-  return vec_parity_lsbb (a);
+  return vec_vprtybq (a);
 }
 
 /* { dg-final { scan-assembler "vprtybd" } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-27 23:01 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-27 23:01 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:013fb6e9e7d3c14e2e91523f1c7e07a5f392f6ad

commit 013fb6e9e7d3c14e2e91523f1c7e07a5f392f6ad
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 27 17:00:50 2021 -0600

    rs6000: More bug fixes
    
    2021-01-27  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h (__builtin_vec_vaduh): Fix.
            (__builtin_vec_vaduw): Fix.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/vadsdub-2.c: Remove deprecated interface.
            * gcc.target/powerpc/vadsduh-2.c: Likewise.
            * gcc.target/powerpc/vadsduw-2.c: Likewise.

Diff:
---
 gcc/config/rs6000/altivec.h                  |  4 +--
 gcc/config/rs6000/rs6000-builtin-new.def     | 14 +++++-----
 gcc/config/rs6000/rs6000-overload.def        | 38 ++++++++++++++--------------
 gcc/testsuite/gcc.target/powerpc/vadsdub-2.c |  2 +-
 gcc/testsuite/gcc.target/powerpc/vadsduh-2.c |  2 +-
 gcc/testsuite/gcc.target/powerpc/vadsduw-2.c |  2 +-
 6 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 5a4c366e0f1..312e5657623 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -267,8 +267,8 @@ __altivec_scalar_pred(vec_any_nle,
 /* Deprecated interfaces.  */
 #ifdef _ARCH_PWR9
 #define __builtin_vec_vadub __builtin_vec_vadu
-#define __builtin_vec_vaduh __builtin_vec_vaduh
-#define __builtin_vec_vaduw __builtin_vec_vaduw
+#define __builtin_vec_vaduh __builtin_vec_vadu
+#define __builtin_vec_vaduw __builtin_vec_vadu
 #endif
 
 #endif /* _ALTIVEC_H */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 061470d8198..417fd2a35dd 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -203,7 +203,7 @@
   const __ibm128 __builtin_pack_ibm128 (double, double);
     PACK_IF packif {}
 
-  void __builtin_set_fpscr_rn (const int[0,7]);
+  void __builtin_set_fpscr_rn (const int[0,3]);
     SET_FPSCR_RN rs6000_set_fpscr_rn {}
 
   const double __builtin_unpack_ibm128 (__ibm128, const int<1>);
@@ -3186,22 +3186,22 @@
   const unsigned long long __builtin_altivec_vgnb (vuq, const int <2,7>);
     VGNB vgnb {}
 
-  const vuc __builtin_altivec_vinsgubvlx (unsigned char, vuc, unsigned int);
+  const vuc __builtin_altivec_vinsgubvlx (unsigned int, vuc, unsigned int);
     VINSERTGPRBL vinsertgl_v16qi {}
 
-  const vuc __builtin_altivec_vinsgubvrx (unsigned char, vuc, unsigned int);
+  const vuc __builtin_altivec_vinsgubvrx (unsigned int, vuc, unsigned int);
     VINSERTGPRBR vinsertgr_v16qi {}
 
-  const vull __builtin_altivec_vinsgudvlx (unsigned long long, vull, unsigned int);
+  const vull __builtin_altivec_vinsgudvlx (unsigned int, vull, unsigned int);
     VINSERTGPRDL vinsertgl_v2di {}
 
-  const vull __builtin_altivec_vinsgudvrx (unsigned long long, vull, unsigned int);
+  const vull __builtin_altivec_vinsgudvrx (unsigned int, vull, unsigned int);
     VINSERTGPRDR vinsertgr_v2di {}
 
-  const vus __builtin_altivec_vinsguhvlx (unsigned short, vus, unsigned int);
+  const vus __builtin_altivec_vinsguhvlx (unsigned int, vus, unsigned int);
     VINSERTGPRHL vinsertgl_v8hi {}
 
-  const vus __builtin_altivec_vinsguhvrx (unsigned short, vus, unsigned int);
+  const vus __builtin_altivec_vinsguhvrx (unsigned int, vus, unsigned int);
     VINSERTGPRHR vinsertgr_v8hi {}
 
   const vui __builtin_altivec_vinsguwvlx (unsigned int, vui, unsigned int);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index f9bf995de28..344c78b6a83 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -555,7 +555,7 @@
   vuc __builtin_vec_clrl (vuc, unsigned int);
     VCLRLB  VCLRLB_U
 
-[VEC_CLRR, vec_clrr, __builtin_vec_clrr, ARCH_PWR10]
+[VEC_CLRR, vec_clrr, __builtin_vec_clrr, _ARCH_PWR10]
   vsc __builtin_vec_clrr (vsc, unsigned int);
     VCLRRB  VCLRRB_S
   vuc __builtin_vec_clrr (vuc, unsigned int);
@@ -1054,7 +1054,7 @@
 
 [VEC_CNTTZM, vec_cnttzm, __builtin_vec_vctzdm, _ARCH_PWR10]
   vull __builtin_vec_vctzdm (vull, vull);
-    CNTTZDM
+    VCTZDM
 
 [VEC_CNTLZ_LSBB, vec_cntlz_lsbb, __builtin_vec_vclzlsbb, _ARCH_PWR9]
   signed int __builtin_vec_vclzlsbb (vsc);
@@ -1680,7 +1680,7 @@
     XXGENPCVM_V2DI
 
 [VEC_GNB, vec_gnb, __builtin_vec_gnb, _ARCH_PWR10]
-  vull __builtin_vec_gnb (vuq, unsigned char);
+  unsigned long long __builtin_vec_gnb (vuq, const int);
     VGNB
 
 ; There are no actual builtins for vec_insert.  There is special handling for
@@ -2856,25 +2856,25 @@
 
 [VEC_PERMX, vec_permx, __builtin_vec_xxpermx, _ARCH_PWR10]
   vsc __builtin_vec_xxpermx (vsc, vsc, vuc, const int);
-    XXPERMX_V16QI
+    XXPERMX_UV2DI  XXPERMX_VSC
   vuc __builtin_vec_xxpermx (vuc, vuc, vuc, const int);
-    XXPERMX_UV16QI
+    XXPERMX_UV2DI  XXPERMX_VUC
   vss __builtin_vec_xxpermx (vss, vss, vuc, const int);
-    XXPERMX_V8HI
+    XXPERMX_UV2DI  XXPERMX_VSS
   vus __builtin_vec_xxpermx (vus, vus, vuc, const int);
-    XXPERMX_UV8HI
+    XXPERMX_UV2DI  XXPERMX_VUS
   vsi __builtin_vec_xxpermx (vsi, vsi, vuc, const int);
-    XXPERMX_V4SI
+    XXPERMX_UV2DI  XXPERMX_VSI
   vui __builtin_vec_xxpermx (vui, vui, vuc, const int);
-    XXPERMX_UV4SI
+    XXPERMX_UV2DI  XXPERMX_VUI
   vsll __builtin_vec_xxpermx (vsll, vsll, vuc, const int);
-    XXPERMX_V2DI
+    XXPERMX_UV2DI  XXPERMX_VSLL
   vull __builtin_vec_xxpermx (vull, vull, vuc, const int);
-    XXPERMX_UV2DI
+    XXPERMX_UV2DI  XXPERMX_VULL
   vf __builtin_vec_xxpermx (vf, vf, vuc, const int);
-    XXPERMX_V4SF
+    XXPERMX_UV2DI  XXPERMX_VF
   vd __builtin_vec_xxpermx (vd, vd, vuc, const int);
-    XXPERMX_V2DF
+    XXPERMX_UV2DI  XXPERMX_VD
 
 [VEC_PERMXOR, vec_permxor, __builtin_vec_vpermxor]
   vsc __builtin_vec_vpermxor (vsc, vsc, vsc);
@@ -2917,17 +2917,17 @@
     VPOPCNTUD
 
 [VEC_PARITY_LSBB, vec_parity_lsbb, __builtin_vec_vparity_lsbb, _ARCH_PWR9]
-  vsi __builtin_vec_vparity_lsbb (vsi);
+  vui __builtin_vec_vparity_lsbb (vsi);
     VPRTYBW  VPRTYBW_S
-  vsi __builtin_vec_vparity_lsbb (vui);
+  vui __builtin_vec_vparity_lsbb (vui);
     VPRTYBW  VPRTYBW_U
-  vsll __builtin_vec_vparity_lsbb (vsll);
+  vull __builtin_vec_vparity_lsbb (vsll);
     VPRTYBD  VPRTYBD_S
-  vsll __builtin_vec_vparity_lsbb (vull);
+  vull __builtin_vec_vparity_lsbb (vull);
     VPRTYBD  VPRTYBD_U
-  vsq __builtin_vec_vparity_lsbb (vsq);
+  vuq __builtin_vec_vparity_lsbb (vsq);
     VPRTYBQ  VPRTYBQ_S
-  vsq __builtin_vec_vparity_lsbb (vuq);
+  vuq __builtin_vec_vparity_lsbb (vuq);
     VPRTYBQ  VPRTYBQ_U
 
 ; There are no actual builtins for vec_promote.  There is special handling for
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c b/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
index c3d1bc84ade..53e2d895d46 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsdub-2.c
@@ -15,7 +15,7 @@ doAbsoluteDifferenceUnsigned (__vector unsigned char *p,
   source_1 = *p;
   source_2 = *q;
 
-  uc_result = vec_absdb (source_1, source_2);
+  uc_result = vec_absd (source_1, source_2);
   return uc_result;
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c b/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
index 7f17694cc09..6e28e62c043 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsduh-2.c
@@ -14,7 +14,7 @@ doAbsoluteDifferenceUnsignedMacro (__vector unsigned short *p,
   source_1 = *p;
   source_2 = *q;
 
-  result = vec_absdh (source_1, source_2);
+  result = vec_absd (source_1, source_2);
   return result;
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c b/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
index a330f526c51..0a22ccd9067 100644
--- a/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vadsduw-2.c
@@ -14,7 +14,7 @@ doAbsoluteDifferenceUnsignedMacro (__vector unsigned int *p,
   source_1 = *p;
   source_2 = *q;
 
-  result = vec_absdw (source_1, source_2);
+  result = vec_absd (source_1, source_2);
   return result;
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-27 16:07 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-27 16:07 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:5865fad98276e06e5ac02354240e065befbf1242

commit 5865fad98276e06e5ac02354240e065befbf1242
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 27 10:06:53 2021 -0600

    rs6000: More bug fixes
    
    2021-01-27  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/altivec.h: Add some deprecated interfaces.
            * config/rs6000/rs6000-builtin-new.def: Miscellaneous fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Add missing break
            statements.
            * config/rs6000/rs6000-overload.def: Miscellaneous fixes.
            * config/rs6000/rs6000.c
            (rs6000_new_builtin_md_vectorized_function): Use
            rs6000_gen_builtins.
    
    gcc/testsuite/
            * gcc.target/powerpc/p8vector-builtin-2.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-3.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-4.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-8.c: Remove deprecated
            builtins.
            * gcc.target/powerpc/p8vector-int128-2.c: Likewise.
            * gcc.target/powerpc/p8vector-vbpermq.c: Likewise.
            * gcc.target/powerpc/p9-vparity.c: Likewise.
            * gcc.target/powerpc/pr79544.c: Likewise.
            * gcc.target/powerpc/pr80315-1.c: Adjust.
            * gcc.target/powerpc/pr80315-2.c: Adjust.
            * gcc.target/powerpc/pr80315-3.c: Adjust.
            * gcc.target/powerpc/pr80315-4.c: Adjust.
            * gcc.target/powerpc/pr88100.c: Adjust.
            * gcc.target/powerpc/pragma_misc9.c: Adjust.
            * gcc.target/powerpc/pragma_power9.c: Undefine
            _RS6000_VECDEFINES_H before including altivec.h.
            * gcc.target/powerpc/swaps-p8-46.c: Remove deprecated builtins.
            * gcc.target/powerpc/test_fpscr_drn_builtin_error.c: Adjust.
            * gcc.target/powerpc/test_fpscr_rn_builtin_error.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        |  7 ++++
 gcc/config/rs6000/rs6000-builtin-new.def           | 10 +++---
 gcc/config/rs6000/rs6000-c.c                       |  9 +++--
 gcc/config/rs6000/rs6000-overload.def              | 39 +++++++++++-----------
 gcc/config/rs6000/rs6000.c                         | 12 +++----
 .../gcc.target/powerpc/p8vector-builtin-2.c        | 16 ++++-----
 .../gcc.target/powerpc/p8vector-builtin-3.c        |  8 ++---
 .../gcc.target/powerpc/p8vector-builtin-4.c        | 18 +++++-----
 .../gcc.target/powerpc/p8vector-builtin-8.c        |  4 +--
 .../gcc.target/powerpc/p8vector-int128-1.c         | 16 ++++-----
 .../gcc.target/powerpc/p8vector-int128-2.c         |  4 +--
 .../gcc.target/powerpc/p8vector-vbpermq.c          |  4 +--
 gcc/testsuite/gcc.target/powerpc/p9-vparity.c      | 32 +++++++++---------
 gcc/testsuite/gcc.target/powerpc/pr79544.c         |  8 +----
 gcc/testsuite/gcc.target/powerpc/pr80315-1.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-2.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-3.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr80315-4.c       |  2 +-
 gcc/testsuite/gcc.target/powerpc/pr88100.c         | 12 +++----
 gcc/testsuite/gcc.target/powerpc/pragma_misc9.c    |  2 +-
 gcc/testsuite/gcc.target/powerpc/pragma_power9.c   |  1 +
 gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c     |  5 +--
 .../powerpc/test_fpscr_drn_builtin_error.c         |  4 +--
 .../powerpc/test_fpscr_rn_builtin_error.c          | 12 +++----
 24 files changed, 117 insertions(+), 114 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 8904d2c545d..5a4c366e0f1 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -264,4 +264,11 @@ __altivec_scalar_pred(vec_any_nle,
    to #define vec_step to __builtin_vec_step.  */
 #define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
 
+/* Deprecated interfaces.  */
+#ifdef _ARCH_PWR9
+#define __builtin_vec_vadub __builtin_vec_vadu
+#define __builtin_vec_vaduh __builtin_vec_vaduh
+#define __builtin_vec_vaduw __builtin_vec_vaduw
+#endif
+
 #endif /* _ALTIVEC_H */
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 449dcd5e257..061470d8198 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -203,7 +203,7 @@
   const __ibm128 __builtin_pack_ibm128 (double, double);
     PACK_IF packif {}
 
-  void __builtin_set_fpscr_rn (signed long long);
+  void __builtin_set_fpscr_rn (const int[0,7]);
     SET_FPSCR_RN rs6000_set_fpscr_rn {}
 
   const double __builtin_unpack_ibm128 (__ibm128, const int<1>);
@@ -1698,7 +1698,7 @@
   const vull __builtin_vsx_xvcvdpuxds (vd);
     XVCVDPUXDS vsx_fixuns_truncv2dfv2di2 {}
 
-  const vull __builtin_vsx_xvcvdpuxds_scale (vd, const int);
+  const vsll __builtin_vsx_xvcvdpuxds_scale (vd, const int);
     XVCVDPUXDS_SCALE vsx_xvcvdpuxds_scale {}
 
 ; Redundant with __builtin_vsx_xvcvdpuxds
@@ -2946,7 +2946,7 @@
   const _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
     PACK_TD packtd {}
 
-  void __builtin_set_fpscr_drn (signed long long);
+  void __builtin_set_fpscr_drn (const int[0,7]);
     SET_FPSCR_DRN rs6000_set_fpscr_drn {}
 
   const unsigned long long __builtin_unpack_dec128 (_Decimal128, const int<1>);
@@ -3348,13 +3348,13 @@
   const vuc __builtin_vsx_xxblend_v16qi (vuc, vuc, vuc);
     VXXBLEND_V16QI xxblend_v16qi {}
 
-  const vd __builtin_vsx_xxblend_v2df (vd, vd, vull);
+  const vd __builtin_vsx_xxblend_v2df (vd, vd, vd);
     VXXBLEND_V2DF xxblend_v2df {}
 
   const vull __builtin_vsx_xxblend_v2di (vull, vull, vull);
     VXXBLEND_V2DI xxblend_v2di {}
 
-  const vf __builtin_vsx_xxblend_v4sf (vf, vf, vui);
+  const vf __builtin_vsx_xxblend_v4sf (vf, vf, vf);
     VXXBLEND_V4SF xxblend_v4sf {}
 
   const vui __builtin_vsx_xxblend_v4si (vui, vui, vui);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 11099d21006..64924df97f9 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2245,10 +2245,9 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 							     params);
 	    }
 	  /* For {un}signed __int128s use the vaddeuqm/vsubeuqm instruction
-	     directly.  This is done by the normal processing.  */
+	     directly.  */
 	  case E_TImode:
-	    {
-	    }
+	    break;
 
 	  /* Types other than {un}signed int and {un}signed __int128
 		are errors.  */
@@ -2345,8 +2344,8 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	  /* For {un}signed __int128s use the vaddecuq/vsubbecuq
 	     instructions.  This occurs through normal processing.  */
 	  case E_TImode:
-	    {
-	    }
+	    break;
+
 	  /* Types other than {un}signed int and {un}signed __int128
 		are errors.  */
 	  default:
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index f6e43b88e07..f9bf995de28 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -433,7 +433,7 @@
   vui __builtin_vec_andc (vui, vui);
     VANDC_V4SI_UNS VANDC_VUI
   vbll __builtin_vec_andc (vbll, vbll);
-    VANDC_V4SI_UNS VANDC_VBLL
+    VANDC_V2DI_UNS VANDC_VBLL
   vsll __builtin_vec_andc (vsll, vsll);
     VANDC_V2DI
   vull __builtin_vec_andc (vull, vull);
@@ -526,7 +526,9 @@
   vull __builtin_vec_vbperm_api (vuq, vuc);
     VBPERMD  VBPERMD_VUQ
   vuc __builtin_vec_vbperm_api (vuc, vuc);
-    VBPERMQ2
+    VBPERMQ2  VBPERMQ2_U
+  vsc __builtin_vec_vbperm_api (vsc, vsc);
+    VBPERMQ2  VBPERMQ2_S
 
 ; #### XVRSPIP{TARGET_VSX};VRFIP
 [VEC_CEIL, vec_ceil, __builtin_vec_ceil]
@@ -2915,17 +2917,17 @@
     VPOPCNTUD
 
 [VEC_PARITY_LSBB, vec_parity_lsbb, __builtin_vec_vparity_lsbb, _ARCH_PWR9]
-  vui __builtin_vec_vparity_lsbb (vsi);
+  vsi __builtin_vec_vparity_lsbb (vsi);
     VPRTYBW  VPRTYBW_S
-  vui __builtin_vec_vparity_lsbb (vui);
+  vsi __builtin_vec_vparity_lsbb (vui);
     VPRTYBW  VPRTYBW_U
-  vull __builtin_vec_vparity_lsbb (vsll);
+  vsll __builtin_vec_vparity_lsbb (vsll);
     VPRTYBD  VPRTYBD_S
-  vull __builtin_vec_vparity_lsbb (vull);
+  vsll __builtin_vec_vparity_lsbb (vull);
     VPRTYBD  VPRTYBD_U
-  vuq __builtin_vec_vparity_lsbb (vsq);
+  vsq __builtin_vec_vparity_lsbb (vsq);
     VPRTYBQ  VPRTYBQ_S
-  vuq __builtin_vec_vparity_lsbb (vuq);
+  vsq __builtin_vec_vparity_lsbb (vuq);
     VPRTYBQ  VPRTYBQ_U
 
 ; There are no actual builtins for vec_promote.  There is special handling for
@@ -3276,17 +3278,17 @@
   vuc __builtin_vec_sldw (vuc, vuc, const int);
     XXSLDWI_16QI  XXSLDWI_VUC
   vss __builtin_vec_sldw (vss, vss, const int);
-    XXSLDWI_16QI  XXSLDWI_VSS
+    XXSLDWI_8HI  XXSLDWI_VSS
   vus __builtin_vec_sldw (vus, vus, const int);
-    XXSLDWI_16QI  XXSLDWI_VUS
+    XXSLDWI_8HI  XXSLDWI_VUS
   vsi __builtin_vec_sldw (vsi, vsi, const int);
-    XXSLDWI_16QI  XXSLDWI_VSI
+    XXSLDWI_4SI  XXSLDWI_VSI
   vui __builtin_vec_sldw (vui, vui, const int);
-    XXSLDWI_16QI  XXSLDWI_VUI
+    XXSLDWI_4SI  XXSLDWI_VUI
   vsll __builtin_vec_sldw (vsll, vsll, const int);
-    XXSLDWI_16QI  XXSLDWI_VSLL
+    XXSLDWI_2DI  XXSLDWI_VSLL
   vull __builtin_vec_sldw (vull, vull, const int);
-    XXSLDWI_16QI  XXSLDWI_VULL
+    XXSLDWI_2DI  XXSLDWI_VULL
 
 [VEC_SLL, vec_sll, __builtin_vec_sll]
   vsc __builtin_vec_sll (vsc, vuc);
@@ -4119,11 +4121,8 @@
     VSUBCUQ  VSUBCUQ_VUQ
 
 ; TODO: Note that the entry for VEC_SUBE currently gets ignored in
-; altivec_resolve_overloaded_builtin.  There are also forms for
-; vsi and vui arguments, but rather than building a define_expand
-; for the instruction sequence generated for those, we do some RTL
-; hackery.  Revisit whether we can remove that.  For now, keep this
-; much of the entry here to generate the #define, at least.
+; altivec_resolve_overloaded_builtin.  Revisit whether we can remove
+; that.  We still need to register the legal builtin forms here.
 [VEC_SUBE, vec_sube, __builtin_vec_sube]
   vsq __builtin_vec_sube (vsq, vsq, vsq);
     VSUBEUQM  VSUBEUQM_VSQ
@@ -4406,6 +4405,8 @@
     LXVW4X_V8HI  LXVW4X_VUS
   vus __builtin_vec_vsx_ld (signed long long, const unsigned short *);
     LXVW4X_V8HI  LXVW4X_US
+  vp __builtin_vec_vsx_ld (signed long long, const vp *);
+    LXVW4X_V8HI  LXVW4X_P
   vsi __builtin_vec_vsx_ld (signed long long, const vsi *);
     LXVW4X_V4SI  LXVW4X_VSI
   vsi __builtin_vec_vsx_ld (signed long long, const signed int *);
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8b7b7820f42..e48cf0ca702 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5570,29 +5570,29 @@ rs6000_new_builtin_md_vectorized_function (tree fndecl, tree type_out,
   in_mode = TYPE_MODE (TREE_TYPE (type_in));
   in_n = TYPE_VECTOR_SUBPARTS (type_in);
 
-  enum rs6000_builtins fn
-    = (enum rs6000_builtins) DECL_MD_FUNCTION_CODE (fndecl);
+  enum rs6000_gen_builtins fn
+    = (enum rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);
   switch (fn)
     {
-    case RS6000_BUILTIN_RSQRTF:
+    case RS6000_BIF_RSQRTF:
       if (VECTOR_UNIT_ALTIVEC_OR_VSX_P (V4SFmode)
 	  && out_mode == SFmode && out_n == 4
 	  && in_mode == SFmode && in_n == 4)
 	return rs6000_builtin_decls_x[RS6000_BIF_VRSQRTFP];
       break;
-    case RS6000_BUILTIN_RSQRT:
+    case RS6000_BIF_RSQRT:
       if (VECTOR_UNIT_VSX_P (V2DFmode)
 	  && out_mode == DFmode && out_n == 2
 	  && in_mode == DFmode && in_n == 2)
 	return rs6000_builtin_decls_x[RS6000_BIF_RSQRT_2DF];
       break;
-    case RS6000_BUILTIN_RECIPF:
+    case RS6000_BIF_RECIPF:
       if (VECTOR_UNIT_ALTIVEC_OR_VSX_P (V4SFmode)
 	  && out_mode == SFmode && out_n == 4
 	  && in_mode == SFmode && in_n == 4)
 	return rs6000_builtin_decls_x[RS6000_BIF_VRECIPFP];
       break;
-    case RS6000_BUILTIN_RECIP:
+    case RS6000_BIF_RECIP:
       if (VECTOR_UNIT_VSX_P (V2DFmode)
 	  && out_mode == DFmode && out_n == 2
 	  && in_mode == DFmode && in_n == 2)
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
index 0259e364aa6..a1f4e4e9a4e 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
@@ -214,17 +214,17 @@ v_bshort vbshort_ne (v_bshort a, v_bshort b)
 }
 
 
-/* { dg-final { scan-assembler-times "vaddudm" 	5 } } */
-/* { dg-final { scan-assembler-times "vsubudm" 	6 } } */
-/* { dg-final { scan-assembler-times "vmaxsd"  	4 } } */
-/* { dg-final { scan-assembler-times "vminsd"  	3 } } */
-/* { dg-final { scan-assembler-times "vmaxud"  	2 } } */
-/* { dg-final { scan-assembler-times "vminud"  	2 } } */
+/* { dg-final { scan-assembler-times "vaddudm" 	3 } } */
+/* { dg-final { scan-assembler-times "vsubudm" 	4 } } */
+/* { dg-final { scan-assembler-times "vmaxsd"  	3 } } */
+/* { dg-final { scan-assembler-times "vminsd"  	2 } } */
+/* { dg-final { scan-assembler-times "vmaxud"  	1 } } */
+/* { dg-final { scan-assembler-times "vminud"  	1 } } */
 /* { dg-final { scan-assembler-times "vcmpequd" 6 } } */
 /* { dg-final { scan-assembler-times "vcmpgtsd" 1 } } */
 /* { dg-final { scan-assembler-times "vcmpgtud" 1 } } */
 /* { dg-final { scan-assembler-times "vrld"     3 } } */
-/* { dg-final { scan-assembler-times "vsld"     5 } } */
-/* { dg-final { scan-assembler-times "vsrad"    3 } } */
+/* { dg-final { scan-assembler-times "vsld"     3 } } */
+/* { dg-final { scan-assembler-times "vsrad"    2 } } */
 /* { dg-final { scan-assembler-times "vcmpequb" 3 } } */
 /* { dg-final { scan-assembler-times "vcmpequw" 6 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
index ae6a3a8437b..0b038edfafe 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
@@ -77,8 +77,8 @@ vll_sign vll_unpack_lo_2 (vi_sign a)
   return vec_unpackl (a);
 }
 
-/* { dg-final { scan-assembler-times "vpkudum" 4 } } */
-/* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
-/* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkudum" 3 } } */
+/* { dg-final { scan-assembler-times "vpkuwum" 2 } } */
+/* { dg-final { scan-assembler-times "vpkuhum" 2 } } */
 /* { dg-final { scan-assembler-times "vupklsw" 3 } } */
-/* { dg-final { scan-assembler-times "vupkhsw" 3 } } */
+/* { dg-final { scan-assembler-times "vupkhsw" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
index 2d2d141948f..e814c648843 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
@@ -156,14 +156,14 @@ vc_uns vc_gbb_3 (vc_uns a)
   return vec_gb (a);
 }
 
-/* { dg-final { scan-assembler-times "vclzd" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzw" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzh" 	5 } } */
-/* { dg-final { scan-assembler-times "vclzb" 	5 } } */
-
-/* { dg-final { scan-assembler-times "vpopcntd" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcntw" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcnth" 5 } } */
-/* { dg-final { scan-assembler-times "vpopcntb" 5 } } */
+/* { dg-final { scan-assembler-times "vclzd" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzw" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzh" 	3 } } */
+/* { dg-final { scan-assembler-times "vclzb" 	3 } } */
+
+/* { dg-final { scan-assembler-times "vpopcntd" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcntw" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcnth" 3 } } */
+/* { dg-final { scan-assembler-times "vpopcntb" 3 } } */
 
 /* { dg-final { scan-assembler-times "vgbbd"    3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
index 0cfbe68c3a4..b5c81ab1ace 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-8.c
@@ -112,7 +112,6 @@ void foo (vector signed char *vscr,
   *vsir++ = vec_sum4s (vsca, vsib);
   *vsir++ = vec_sum4s (vssa, vsib);
   *vuir++ = vec_sum4s (vuca, vuib);
-
 }
 
 /* { dg-final { scan-assembler-times "vaddcuq" 2 } } */
@@ -125,7 +124,8 @@ void foo (vector signed char *vscr,
 /* { dg-final { scan-assembler-times "vsubecuq" 2 } } */
 /* { dg-final { scan-assembler-times "vsubcuw" 4 } } */
 /* { dg-final { scan-assembler-times "vsubuwm" 4 } } */
-/* { dg-final { scan-assembler-times "vbpermq" 2 } } */
+/* { dg-final { scan-assembler-times "vbpermq" 1 } } */
+/* { dg-final { scan-assembler-times "vbpermd" 1 } } */
 /* { dg-final { scan-assembler-times "xxleqv" 4 } } */
 /* { dg-final { scan-assembler-times "vgbbd" 1 } } */
 /* { dg-final { scan-assembler-times "xxlnand" 4 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
index 28b148c692c..8a7484b7144 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-1.c
@@ -13,49 +13,49 @@
 TYPE
 do_addcuq (TYPE p, TYPE q)
 {
-  return __builtin_vec_vaddcuq (p, q);
+  return vec_addc (p, q);
 }
 
 TYPE
 do_adduqm (TYPE p, TYPE q)
 {
-  return __builtin_vec_add (p, q);
+  return vec_add (p, q);
 }
 
 TYPE
 do_addeuqm (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vaddeuqm (p, q, r);
+  return vec_adde (p, q, r);
 }
 
 TYPE
 do_addecuq (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vaddecuq (p, q, r);
+  return vec_addec (p, q, r);
 }
 
 TYPE
 do_subeuqm (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vsubeuqm (p, q, r);
+  return vec_sube (p, q, r);
 }
 
 TYPE
 do_subecuq (TYPE p, TYPE q, TYPE r)
 {
-  return __builtin_vec_vsubecuq (p, q, r);
+  return vec_subec (p, q, r);
 }
 
 TYPE
 do_subcuq (TYPE p, TYPE q)
 {
-  return __builtin_vec_vsubcuq (p, q);
+  return vec_subc (p, q);
 }
 
 TYPE
 do_subuqm (TYPE p, TYPE q)
 {
-  return __builtin_vec_vsubuqm (p, q);
+  return vec_sub (p, q);
 }
 
 TYPE
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
index 72358d616b1..cdeebb36342 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-int128-2.c
@@ -132,7 +132,7 @@ main (void)
 
       v_reg_in1 = (V_TYPE) { s_reg_in1 };
       v_reg_in2 = (V_TYPE) { s_reg_in2 };
-      v_reg_res = vec_vadduqm (v_reg_in1, v_reg_in2);
+      v_reg_res = vec_add (v_reg_in1, v_reg_in2);
       reg_errors += compare (s_reg_res, v_reg_res, "", "reg, res");
 
       s_mem_in1 = s_reg_in1;
@@ -144,7 +144,7 @@ main (void)
       mem_errors += compare (s_mem_in2, (V_TYPE) { s_mem_in2 }, "", "mem, in2");
 
       s_mem_res = s_mem_in1 + s_mem_in2;
-      v_mem_res = vec_vadduqm (v_mem_in1, v_mem_in2);
+      v_mem_res = vec_add (v_mem_in1, v_mem_in2);
       mem_errors += compare (s_mem_res, v_mem_res, "", "mem, res");
 
       nl = "\n";
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c b/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
index c2ab68ba761..e5601b13b3a 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c
@@ -17,11 +17,11 @@
 
 long foos (vector signed char a, vector signed char b)
 {
-  return vec_extract (vec_vbpermq (a, b), OFFSET);
+  return vec_extract (vec_bperm (a, b), OFFSET);
 }
 
 long foou (vector unsigned char a, vector unsigned char b)
 {
-  return vec_extract (vec_vbpermq (a, b), OFFSET);
+  return vec_extract (vec_bperm (a, b), OFFSET);
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
index f4aba1567cd..8897a5b6b7f 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-vparity.c
@@ -9,97 +9,97 @@
 vector int
 parity_v4si_1s (vector int a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector int
 parity_v4si_2s (vector int a)
 {
-  return vec_vprtybw (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned int
 parity_v4si_1u (vector unsigned int a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned int
 parity_v4si_2u (vector unsigned int a)
 {
-  return vec_vprtybw (a);
+  return vec_parity_lsbb (a);
 }
 
 vector long long
 parity_v2di_1s (vector long long a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector long long
 parity_v2di_2s (vector long long a)
 {
-  return vec_vprtybd (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned long long
 parity_v2di_1u (vector unsigned long long a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector unsigned long long
 parity_v2di_2u (vector unsigned long long a)
 {
-  return vec_vprtybd (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __int128_t
 parity_v1ti_1s (vector __int128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __int128_t
 parity_v1ti_2s (vector __int128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 __int128_t
 parity_ti_3s (__int128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 __int128_t
 parity_ti_4s (__int128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __uint128_t
 parity_v1ti_1u (vector __uint128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 vector __uint128_t
 parity_v1ti_2u (vector __uint128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 __uint128_t
 parity_ti_3u (__uint128_t a)
 {
-  return vec_vprtyb (a);
+  return vec_parity_lsbb (a);
 }
 
 __uint128_t
 parity_ti_4u (__uint128_t a)
 {
-  return vec_vprtybq (a);
+  return vec_parity_lsbb (a);
 }
 
 /* { dg-final { scan-assembler "vprtybd" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79544.c b/gcc/testsuite/gcc.target/powerpc/pr79544.c
index 3f782489bbd..ecdbbcc67bd 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr79544.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr79544.c
@@ -10,11 +10,5 @@ test_sra (vector unsigned long long x, vector unsigned long long y)
   return vec_sra (x, y);
 }
 
-vector unsigned long long
-test_vsrad (vector unsigned long long x, vector unsigned long long y)
-{
-  return vec_vsrad (x, y);
-}
-
-/* { dg-final { scan-assembler-times {\mvsrad\M} 2 } } */
+/* { dg-final { scan-assembler-times {\mvsrad\M} 1 } } */
 
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-1.c b/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
index e2db0ff4b5f..f37f1f169a2 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-1.c
@@ -10,6 +10,6 @@ main()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = __builtin_crypto_vshasigmaw (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = __builtin_crypto_vshasigmaw (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return 0;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-2.c b/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
index 144b705c012..0819a0511b7 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-2.c
@@ -10,6 +10,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = __builtin_crypto_vshasigmad (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = __builtin_crypto_vshasigmad (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return 0;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-3.c b/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
index 99a3e24eadd..cc2e46cf5cb 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-3.c
@@ -12,6 +12,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return res;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80315-4.c b/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
index 7f5f6f75029..ac12910741b 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr80315-4.c
@@ -12,6 +12,6 @@ main ()
   int mask;
 
   /* Argument 2 must be 0 or 1.  Argument 3 must be in range 0..15.  */
-  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be in the range \[0, 15\]} } */
+  res = vec_shasigma_be (test, 1, 0xff); /* { dg-error {argument 3 must be a 4-bit unsigned literal} } */
   return res;
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr88100.c b/gcc/testsuite/gcc.target/powerpc/pr88100.c
index 4452145ce95..764c897a497 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr88100.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr88100.c
@@ -10,35 +10,35 @@
 vector unsigned char
 splatu1 (void)
 {
-  return vec_splat_u8(0x100);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u8(0x100);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned short
 splatu2 (void)
 {
-  return vec_splat_u16(0x10000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u16(0x10000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned int
 splatu3 (void)
 {
-  return vec_splat_u32(0x10000000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u32(0x10000000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed char
 splats1 (void)
 {
-  return vec_splat_s8(0x100);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s8(0x100);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed short
 splats2 (void)
 {
-  return vec_splat_s16(0x10000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s16(0x10000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed int
 splats3 (void)
 {
-  return vec_splat_s32(0x10000000);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s32(0x10000000);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c b/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
index e03099bd084..61274463653 100644
--- a/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
+++ b/gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
@@ -20,7 +20,7 @@ vector bool int
 test2 (vector signed int a, vector signed int b)
 {
   return vec_cmpnez (a, b);
-  /* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mcpu=power9' option" "" { target *-*-* } .-1 } */
+  /* { dg-error "'__builtin_altivec_vcmpnezw' requires the '-mpower9-vector' option" "" { target *-*-* } .-1 } */
 }
 
 #pragma GCC target ("cpu=power7")
diff --git a/gcc/testsuite/gcc.target/powerpc/pragma_power9.c b/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
index e33aad1aaf7..5327c8c8cc8 100644
--- a/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
+++ b/gcc/testsuite/gcc.target/powerpc/pragma_power9.c
@@ -50,6 +50,7 @@ test3b (vec_t a, vec_t b)
 
 #pragma GCC target ("cpu=power9,power9-vector")
 #undef _ALTIVEC_H
+#undef _RS6000_VECDEFINES_H
 #include <altivec.h>
 #ifdef _ARCH_PWR9
 vector bool int
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
index 4738d5e0139..3911ac9e713 100644
--- a/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
+++ b/gcc/testsuite/gcc.target/powerpc/swaps-p8-46.c
@@ -2,6 +2,7 @@
 /* { dg-require-effective-target powerpc_p8vector_ok } */
 /* { dg-options "-mdejagnu-cpu=power8 -O2 " } */
 
+#include <altivec.h>
 typedef __attribute__ ((__aligned__ (8))) unsigned long long __m64;
 typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
 
@@ -17,8 +18,8 @@ _mm_movemask_ps (__m128 *__A)
     };
 
   result = (__vector __m64)
-    __builtin_vec_vbpermq ((__vector unsigned char) (*__A),
-			   (__vector unsigned char) perm_mask);
+    vec_bperm ((__vector unsigned char) (*__A),
+	       (__vector unsigned char) perm_mask);
   return result[1];
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
index 028ab0b6d66..4f9d9e08e8a 100644
--- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
+++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
@@ -9,8 +9,8 @@ int main ()
      __builtin_set_fpscr_drn() also support a variable as an argument but
      can't test variable value at compile time.  */
 
-  __builtin_set_fpscr_drn(-1);  /* { dg-error "Argument must be a value between 0 and 7" } */ 
-  __builtin_set_fpscr_drn(8);   /* { dg-error "Argument must be a value between 0 and 7" } */ 
+  __builtin_set_fpscr_drn(-1);  /* { dg-error "argument 1 must be a variable or a literal between 0 and 7, inclusive" } */ 
+  __builtin_set_fpscr_drn(8);   /* { dg-error "argument 1 must be a variable or a literal between 0 and 7, inclusive" } */ 
 
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
index aea65091b0c..10391b71008 100644
--- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
+++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
@@ -8,13 +8,13 @@ int main ()
      int arguments.  The builtins __builtin_set_fpscr_rn() also supports a
      variable as an argument but can't test variable value at compile time.  */
 
-  __builtin_mtfsb0(-1);  /* { dg-error "Argument must be a constant between 0 and 31" } */
-  __builtin_mtfsb0(32);  /* { dg-error "Argument must be a constant between 0 and 31" } */
+  __builtin_mtfsb0(-1);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
+  __builtin_mtfsb0(32);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
 
-  __builtin_mtfsb1(-1);  /* { dg-error "Argument must be a constant between 0 and 31" } */
-  __builtin_mtfsb1(32);  /* { dg-error "Argument must be a constant between 0 and 31" } */ 
+  __builtin_mtfsb1(-1);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */
+  __builtin_mtfsb1(32);  /* { dg-error "argument 1 must be a 5-bit unsigned literal" } */ 
 
-  __builtin_set_fpscr_rn(-1);  /* { dg-error "Argument must be a value between 0 and 3" } */ 
-  __builtin_set_fpscr_rn(4);   /* { dg-error "Argument must be a value between 0 and 3" } */ 
+  __builtin_set_fpscr_rn(-1);  /* { dg-error "argument 1 must be a variable or a literal between 0 and 3, inclusive" } */ 
+  __builtin_set_fpscr_rn(4);   /* { dg-error "argument 1 must be a variable or a literal between 0 and 3, inclusive" } */ 
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-14 23:07 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-14 23:07 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:37e08634788ae74488be734f9cce3a87e9be96bc

commit 37e08634788ae74488be734f9cce3a87e9be96bc
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 14 17:06:55 2021 -0600

    rs6000: More bug fixes
    
    2021-01-14  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-7.c: Adjust.
            * gcc.target/powerpc/cmpb-2.c: Adjust.
            * gcc.target/powerpc/cmpb32-2.c: Adjust.
            * gcc.target/powerpc/fold-vec-mule-misc.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-floatdouble.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-longlong.c: Adjust.
            * gcc.target/powerpc/fold-vec-splat-misc-invalid.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-2.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-3.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-4.c: Adjust.
            * gcc.target/powerpc/p8vector-builtin-7.c: Adjust.

Diff:
---
 gcc/config/rs6000/altivec.h                        |   2 +
 gcc/config/rs6000/rs6000-builtin-new.def           |  24 ++--
 gcc/config/rs6000/rs6000-overload.def              |  11 +-
 gcc/testsuite/gcc.target/powerpc/altivec-7.c       |   2 +-
 gcc/testsuite/gcc.target/powerpc/cmpb-2.c          |   2 +-
 gcc/testsuite/gcc.target/powerpc/cmpb32-2.c        |   2 +-
 .../gcc.target/powerpc/fold-vec-mule-misc.c        |   8 +-
 .../powerpc/fold-vec-splat-floatdouble.c           |   4 +-
 .../gcc.target/powerpc/fold-vec-splat-longlong.c   |  10 +-
 .../powerpc/fold-vec-splat-misc-invalid.c          |   8 +-
 .../gcc.target/powerpc/p8vector-builtin-2.c        |  55 ---------
 .../gcc.target/powerpc/p8vector-builtin-3.c        |  27 +----
 .../gcc.target/powerpc/p8vector-builtin-4.c        | 124 ++++-----------------
 .../gcc.target/powerpc/p8vector-builtin-7.c        |   8 +-
 14 files changed, 61 insertions(+), 226 deletions(-)

diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 0eae8a6404a..8904d2c545d 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -66,6 +66,8 @@
 /* VSX additions */
 #define vec_vsx_ld __builtin_vec_vsx_ld
 #define vec_vsx_st __builtin_vec_vsx_st
+#define __builtin_vec_xl __builtin_vec_vsx_ld
+#define __builtin_vec_xst __builtin_vec_vsx_st
 
 #define __builtin_bcdadd_ofl __builtin_vec_bcdadd_ov
 #define __builtin_bcdsub_ofl __builtin_vec_bcdsub_ov
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 9c4470bf400..449dcd5e257 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -805,13 +805,13 @@
   const vus __builtin_altivec_vpkswus (vsi, vsi);
     VPKSWUS altivec_vpkswus {}
 
-  const vuc __builtin_altivec_vpkuhum (vus, vus);
+  const vsc __builtin_altivec_vpkuhum (vss, vss);
     VPKUHUM altivec_vpkuhum {}
 
   const vuc __builtin_altivec_vpkuhus (vus, vus);
     VPKUHUS altivec_vpkuhus {}
 
-  const vus __builtin_altivec_vpkuwum (vui, vui);
+  const vss __builtin_altivec_vpkuwum (vsi, vsi);
     VPKUWUM altivec_vpkuwum {}
 
   const vus __builtin_altivec_vpkuwus (vui, vui);
@@ -1219,7 +1219,7 @@
   const vsll __builtin_altivec_vreve_v2di (vsll);
     VREVE_V2DI altivec_vrevev2di2 {}
 
-  const vd __builtin_altivec_vsel_2df (vd, vd, vull);
+  const vd __builtin_altivec_vsel_2df (vd, vd, vd);
     VSEL_2DF vector_select_v2df {}
 
   const vsll __builtin_altivec_vsel_2di (vsll, vsll, vull);
@@ -2263,7 +2263,7 @@
   const vui __builtin_altivec_vpksdus (vsll, vsll);
     VPKSDUS altivec_vpksdus {}
 
-  const vui __builtin_altivec_vpkudum (vull, vull);
+  const vsi __builtin_altivec_vpkudum (vsll, vsll);
     VPKUDUM altivec_vpkudum {}
 
   const vui __builtin_altivec_vpkudus (vull, vull);
@@ -2285,13 +2285,13 @@
 ;  const vull __builtin_altivec_vpmsumw (vui, vui);
 ;    VPMSUMW crypto_vpmsumw {}
 
-  const vuc __builtin_altivec_vpopcntb (vsc);
+  const vsc __builtin_altivec_vpopcntb (vsc);
     VPOPCNTB popcountv16qi2 {}
 
-  const vull __builtin_altivec_vpopcntd (vsll);
+  const vsll __builtin_altivec_vpopcntd (vsll);
     VPOPCNTD popcountv2di2 {}
 
-  const vus __builtin_altivec_vpopcnth (vss);
+  const vss __builtin_altivec_vpopcnth (vss);
     VPOPCNTH popcountv8hi2 {}
 
   const vuc __builtin_altivec_vpopcntub (vuc);
@@ -2306,16 +2306,16 @@
   const vui __builtin_altivec_vpopcntuw (vui);
     VPOPCNTUW popcountv4si2 {}
 
-  const vui __builtin_altivec_vpopcntw (vsi);
+  const vsi __builtin_altivec_vpopcntw (vsi);
     VPOPCNTW popcountv4si2 {}
 
-  const vsll __builtin_altivec_vrld (vsll, vull);
+  const vsll __builtin_altivec_vrld (vsll, vsll);
     VRLD vrotlv2di3 {}
 
-  const vsll __builtin_altivec_vsld (vsll, vull);
+  const vsll __builtin_altivec_vsld (vsll, vsll);
     VSLD vashlv2di3 {}
 
-  const vsll __builtin_altivec_vsrad (vsll, vull);
+  const vsll __builtin_altivec_vsrad (vsll, vsll);
     VSRAD vashrv2di3 {}
 
   const vsll __builtin_altivec_vsrd (vsll, vull);
@@ -2330,7 +2330,7 @@
   const vuq __builtin_altivec_vsubeuqm (vuq, vuq, vuq);
     VSUBEUQM altivec_vsubeuqm {}
 
-  const vull __builtin_altivec_vsubudm (vull, vull);
+  const vsll __builtin_altivec_vsubudm (vsll, vsll);
     VSUBUDM subv2di3 {}
 
   const vuq __builtin_altivec_vsubuqm (vuq, vuq);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index e80e163f8ec..f6e43b88e07 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3830,7 +3830,7 @@
   void __builtin_vec_stl (vd, signed long long, double *);
     STVXL_V2DF  STVXL_D
 
-[VEC_STRIL, vec_stril, __builtin_vec_stril, ARCH_PWR10]
+[VEC_STRIL, vec_stril, __builtin_vec_stril, _ARCH_PWR10]
   vuc __builtin_vec_stril (vuc);
     VSTRIBL  VSTRIBL_U
   vsc __builtin_vec_stril (vsc);
@@ -3860,7 +3860,7 @@
   vss __builtin_vec_strir (vss);
     VSTRIHR  VSTRIHR_S
 
-[VEC_STRIR_P, vec_strir_p, __builtin_vec_strir_p, ARCH_PWR10]
+[VEC_STRIR_P, vec_strir_p, __builtin_vec_strir_p, _ARCH_PWR10]
   signed int __builtin_vec_strir_p (vuc);
     VSTRIBR_P  VSTRIBR_PU
   signed int __builtin_vec_strir_p (vsc);
@@ -4131,11 +4131,8 @@
     VSUBEUQM  VSUBEUQM_VUQ
 
 ; TODO: Note that the entry for VEC_SUBEC currently gets ignored in
-; altivec_resolve_overloaded_builtin.  There are also forms for
-; vsi and vui arguments, but rather than building a define_expand
-; for the instruction sequence generated for those, we do some RTL
-; hackery.  Revisit whether we can remove that.  For now, keep this
-; much of the entry here to generate the #define, at least.
+; altivec_resolve_overloaded_builtin.  Revisit whether we can remove
+; that.  We still need to register the legal builtin forms here.
 [VEC_SUBEC, vec_subec, __builtin_vec_subec]
   vsq __builtin_vec_subec (vsq, vsq, vsq);
     VSUBECUQ  VSUBECUQ_VSQ
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 46bf7148b20..52f5ecc8d59 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -84,7 +84,7 @@ int main ()
 /* { dg-final { scan-assembler-times {\mlvx\M} 39 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
-/* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
+/* { dg-final { scan-assembler-times {\mlxv} 39 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times "lvewx" 1 } } */
 /* { dg-final { scan-assembler-times "lvxl" 1 } } */
 /* { dg-final { scan-assembler-times "vupklsh" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/cmpb-2.c b/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
index 113ab6a5f99..02b84d0731d 100644
--- a/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/cmpb-2.c
@@ -8,7 +8,7 @@ void abort ();
 unsigned long long int
 do_compare (unsigned long long int a, unsigned long long int b)
 {
-  return __builtin_cmpb (a, b);	/* { dg-warning "implicit declaration of function '__builtin_cmpb'" } */
+  return __builtin_cmpb (a, b);	/* { dg-error "'__builtin_p6_cmpb' requires the '-mcpu=power6' option" } */
 }
 
 void
diff --git a/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c b/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
index 37b54745e0e..d4264ab6e7d 100644
--- a/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
@@ -7,7 +7,7 @@ void abort ();
 unsigned int
 do_compare (unsigned int a, unsigned int b)
 {
-  return __builtin_cmpb (a, b);  /* { dg-warning "implicit declaration of function '__builtin_cmpb'" } */
+  return __builtin_cmpb (a, b);  /* { dg-error "'__builtin_p6_cmpb_32' requires the '-mcpu=power6' option" } */
 }
 
 void
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
index 7daf30215b8..19a5d044c4d 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-mule-misc.c
@@ -11,7 +11,7 @@ test_eub_char ()
 {
   volatile vector unsigned char v0 = {1, 0, 0, 0, 0, 0, 0, 0};
   volatile vector unsigned char v1 = {0xff, 0, 0, 0, 0, 0, 0, 0};
-  vector unsigned short res = vec_vmuleub (v0, v1);
+  vector unsigned short res = vec_mule (v0, v1);
   if (res[0] != (unsigned short)v0[0] * (unsigned short)v1[0])
     __builtin_abort ();
 }
@@ -21,7 +21,7 @@ test_oub_char ()
 {
   volatile vector unsigned char v0 = {0, 1, 0, 0, 0, 0, 0, 0};
   volatile vector unsigned char v1 = {0, 0xff, 0, 0, 0, 0, 0, 0};
-  vector unsigned short res = vec_vmuloub (v0, v1);
+  vector unsigned short res = vec_mulo (v0, v1);
   if (res[0] != (unsigned short)v0[1] * (unsigned short)v1[1])
     __builtin_abort ();
 }
@@ -31,7 +31,7 @@ test_euh_short ()
 {
   volatile vector unsigned short v0 = {1, 0, 0, 0};
   volatile vector unsigned short v1 = {0xff, 0, 0, 0};
-  vector unsigned int res = vec_vmuleuh (v0, v1);
+  vector unsigned int res = vec_mule (v0, v1);
   if (res[0] != (unsigned int)v0[0] * (unsigned int)v1[0])
     __builtin_abort ();
 }
@@ -41,7 +41,7 @@ test_ouh_short ()
 {
   volatile vector unsigned short v0 = {0, 1, 0, 0};
   volatile vector unsigned short v1 = {0, 0xff, 0, 0};
-  vector unsigned int res = vec_vmulouh (v0, v1);
+  vector unsigned int res = vec_mulo (v0, v1);
   if (res[0] != (unsigned int)v0[1] * (unsigned int)v1[1])
     __builtin_abort ();
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
index ab396967c3d..3f22ba31862 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
@@ -18,7 +18,7 @@ vector float test_fc ()
 vector double testd_00 (vector double x) { return vec_splat (x, 0b00000); }
 vector double testd_01 (vector double x) { return vec_splat (x, 0b00001); }
 vector double test_dc ()
-{ const vector double y = { 3.0, 5.0 }; return vec_splat (y, 0b00010); }
+{ const vector double y = { 3.0, 5.0 }; return vec_splat (y, 0b00001); }
 
 /* If the source vector is a known constant, we will generate a load.  */
 /* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M} 2 } } */
@@ -27,5 +27,5 @@ vector double test_dc ()
 /* { dg-final { scan-assembler-times "vspltw|xxspltw" 3 } } */
 
 /* For double types, we will generate xxpermdi instructions.  */
-/* { dg-final { scan-assembler-times "xxpermdi" 3 } } */
+/* { dg-final { scan-assembler-times "xxpermdi" 2 } } */
 
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
index 4fa06c85ecc..9376f702a7a 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
@@ -9,23 +9,19 @@
 
 vector bool long long testb_00 (vector bool long long x) { return vec_splat (x, 0b00000); }
 vector bool long long testb_01 (vector bool long long x) { return vec_splat (x, 0b00001); }
-vector bool long long testb_02 (vector bool long long x) { return vec_splat (x, 0b00010); }
 
 vector signed long long tests_00 (vector signed long long x) { return vec_splat (x, 0b00000); }
 vector signed long long tests_01 (vector signed long long x) { return vec_splat (x, 0b00001); }
-vector signed long long tests_02 (vector signed long long x) { return vec_splat (x, 0b00010); }
 
 vector unsigned long long testu_00 (vector unsigned long long x) { return vec_splat (x, 0b00000); }
 vector unsigned long long testu_01 (vector unsigned long long x) { return vec_splat (x, 0b00001); }
-vector unsigned long long testu_02 (vector unsigned long long x) { return vec_splat (x, 0b00010); }
 
 /* Similar test as above, but the source vector is a known constant. */
-vector bool long long test_bll () { const vector bool long long y = {12, 23}; return vec_splat (y, 0b00010); }
-vector signed long long test_sll () { const vector signed long long y = {34, 45}; return vec_splat (y, 0b00010); }
-vector unsigned long long test_ull () { const vector unsigned long long y = {56, 67}; return vec_splat (y, 0b00010); }
+vector bool long long test_bll () { const vector bool long long y = {12, 23}; return vec_splat (y, 0b00001); }
+vector signed long long test_sll () { const vector signed long long y = {34, 45}; return vec_splat (y, 0b00001); }
 
 /* Assorted load instructions for the initialization with known constants. */
-/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M} 3 } } */
+/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M|\mxxspltib\M} 2 } } */
 
 /* xxpermdi for vec_splat of long long vectors.
  At the time of this writing, the number of xxpermdi instructions
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
index 20f5b05561e..263a1723d31 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
@@ -10,24 +10,24 @@
 vector signed short
 testss_1 (unsigned int ui)
 {
-  return vec_splat_s16 (ui);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s16 (ui);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned short
 testss_2 (signed int si)
 {
-  return vec_splat_u16 (si);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u16 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector signed char
 testsc_1 (unsigned int ui)
 {
-  return vec_splat_s8 (ui); /* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_s8 (ui); /* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
 vector unsigned char
 testsc_2 (signed int si)
 {
-  return vec_splat_u8 (si);/* { dg-error "argument 1 must be a 5-bit signed literal" } */
+  return vec_splat_u8 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
index 102e1d1f813..0259e364aa6 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
@@ -27,11 +27,6 @@ v_sign sign_add_2 (v_sign a, v_sign b)
   return vec_add (a, b);
 }
 
-v_sign sign_add_3 (v_sign a, v_sign b)
-{
-  return vec_vaddudm (a, b);
-}
-
 v_sign sign_sub_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vsubudm (a, b);
@@ -43,11 +38,6 @@ v_sign sign_sub_2 (v_sign a, v_sign b)
 }
 
 
-v_sign sign_sub_3 (v_sign a, v_sign b)
-{
-  return vec_vsubudm (a, b);
-}
-
 v_sign sign_min_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vminsd (a, b);
@@ -58,11 +48,6 @@ v_sign sign_min_2 (v_sign a, v_sign b)
   return vec_min (a, b);
 }
 
-v_sign sign_min_3 (v_sign a, v_sign b)
-{
-  return vec_vminsd (a, b);
-}
-
 v_sign sign_max_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vmaxsd (a, b);
@@ -73,11 +58,6 @@ v_sign sign_max_2 (v_sign a, v_sign b)
   return vec_max (a, b);
 }
 
-v_sign sign_max_3 (v_sign a, v_sign b)
-{
-  return vec_vmaxsd (a, b);
-}
-
 v_sign sign_abs (v_sign a)
 {
   return vec_abs (a);		/* xor, vsubudm, vmaxsd.  */
@@ -98,41 +78,21 @@ v_uns uns_add_2 (v_uns a, v_uns b)
   return vec_add (a, b);
 }
 
-v_uns uns_add_3 (v_uns a, v_uns b)
-{
-  return vec_vaddudm (a, b);
-}
-
 v_uns uns_sub_2 (v_uns a, v_uns b)
 {
   return vec_sub (a, b);
 }
 
-v_uns uns_sub_3 (v_uns a, v_uns b)
-{
-  return vec_vsubudm (a, b);
-}
-
 v_uns uns_min_2 (v_uns a, v_uns b)
 {
   return vec_min (a, b);
 }
 
-v_uns uns_min_3 (v_uns a, v_uns b)
-{
-  return vec_vminud (a, b);
-}
-
 v_uns uns_max_2 (v_uns a, v_uns b)
 {
   return vec_max (a, b);
 }
 
-v_uns uns_max_3 (v_uns a, v_uns b)
-{
-  return vec_vmaxud (a, b);
-}
-
 v_bool uns_eq (v_uns a, v_uns b)
 {
   return vec_cmpeq (a, b);
@@ -168,21 +128,11 @@ v_sign sign_sl_2 (v_sign a, v_uns b)
   return vec_sl (a, b);
 }
 
-v_sign sign_sl_3 (v_sign a, v_uns b)
-{
-  return vec_vsld (a, b);
-}
-
 v_uns uns_sl_2 (v_uns a, v_uns b)
 {
   return vec_sl (a, b);
 }
 
-v_uns uns_sl_3 (v_uns a, v_uns b)
-{
-  return vec_vsld (a, b);
-}
-
 v_sign sign_sra_1 (v_sign a, v_sign b)
 {
   return __builtin_altivec_vsrad (a, b);
@@ -193,11 +143,6 @@ v_sign sign_sra_2 (v_sign a, v_uns b)
   return vec_sra (a, b);
 }
 
-v_sign sign_sra_3 (v_sign a, v_uns b)
-{
-  return vec_vsrad (a, b);
-}
-
 v_bchar vbchar_eq (v_bchar a, v_bchar b)
 {
   return vec_cmpeq (a, b);
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
index 33304fe6132..ae6a3a8437b 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
@@ -37,11 +37,6 @@ vi_uns vi_pack_3 (vll_uns a, vll_uns b)
   return vec_pack (a, b);
 }
 
-vi_sign vi_pack_4 (vll_sign a, vll_sign b)
-{
-  return vec_vpkudum (a, b);
-}
-
 vs_sign vs_pack_1 (vi_sign a, vi_sign b)
 {
   return __builtin_altivec_vpkuwum (a, b);
@@ -52,11 +47,6 @@ vs_sign vs_pack_2 (vi_sign a, vi_sign b)
   return vec_pack (a, b);
 }
 
-vs_sign vs_pack_3 (vi_sign a, vi_sign b)
-{
-  return vec_vpkuwum (a, b);
-}
-
 vc_sign vc_pack_1 (vs_sign a, vs_sign b)
 {
   return __builtin_altivec_vpkuhum (a, b);
@@ -67,11 +57,6 @@ vc_sign vc_pack_2 (vs_sign a, vs_sign b)
   return vec_pack (a, b);
 }
 
-vc_sign vc_pack_3 (vs_sign a, vs_sign b)
-{
-  return vec_vpkuhum (a, b);
-}
-
 vll_sign vll_unpack_hi_1 (vi_sign a)
 {
   return __builtin_altivec_vupkhsw (a);
@@ -84,12 +69,7 @@ vll_sign vll_unpack_hi_2 (vi_sign a)
 
 vll_sign vll_unpack_hi_3 (vi_sign a)
 {
-  return __builtin_vec_vupkhsw (a);
-}
-
-vll_sign vll_unpack_lo_1 (vi_sign a)
-{
-  return vec_vupklsw (a);
+  return __builtin_altivec_vupkhsw (a);
 }
 
 vll_sign vll_unpack_lo_2 (vi_sign a)
@@ -97,11 +77,6 @@ vll_sign vll_unpack_lo_2 (vi_sign a)
   return vec_unpackl (a);
 }
 
-vll_sign vll_unpack_lo_3 (vi_sign a)
-{
-  return vec_vupklsw (a);
-}
-
 /* { dg-final { scan-assembler-times "vpkudum" 4 } } */
 /* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
 /* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
index 8329e2bae5a..2d2d141948f 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-4.c
@@ -28,22 +28,12 @@ vll_sign vll_clz_1 (vll_sign a)
 
 vll_sign vll_clz_2 (vll_sign a)
 {
-  return vec_vclz (a);
-}
-
-vll_sign vll_clz_3 (vll_sign a)
-{
-  return vec_vclzd (a);
+  return vec_cntlz (a);
 }
 
 vll_uns vll_clz_4 (vll_uns a)
 {
-  return vec_vclz (a);
-}
-
-vll_uns vll_clz_5 (vll_uns a)
-{
-  return vec_vclzd (a);
+  return vec_cntlz (a);
 }
 
 vi_sign vi_clz_1 (vi_sign a)
@@ -53,22 +43,12 @@ vi_sign vi_clz_1 (vi_sign a)
 
 vi_sign vi_clz_2 (vi_sign a)
 {
-  return vec_vclz (a);
-}
-
-vi_sign vi_clz_3 (vi_sign a)
-{
-  return vec_vclzw (a);
+  return vec_cntlz (a);
 }
 
 vi_uns vi_clz_4 (vi_uns a)
 {
-  return vec_vclz (a);
-}
-
-vi_uns vi_clz_5 (vi_uns a)
-{
-  return vec_vclzw (a);
+  return vec_cntlz (a);
 }
 
 vs_sign vs_clz_1 (vs_sign a)
@@ -78,22 +58,12 @@ vs_sign vs_clz_1 (vs_sign a)
 
 vs_sign vs_clz_2 (vs_sign a)
 {
-  return vec_vclz (a);
-}
-
-vs_sign vs_clz_3 (vs_sign a)
-{
-  return vec_vclzh (a);
+  return vec_cntlz (a);
 }
 
 vs_uns vs_clz_4 (vs_uns a)
 {
-  return vec_vclz (a);
-}
-
-vs_uns vs_clz_5 (vs_uns a)
-{
-  return vec_vclzh (a);
+  return vec_cntlz (a);
 }
 
 vc_sign vc_clz_1 (vc_sign a)
@@ -103,22 +73,12 @@ vc_sign vc_clz_1 (vc_sign a)
 
 vc_sign vc_clz_2 (vc_sign a)
 {
-  return vec_vclz (a);
-}
-
-vc_sign vc_clz_3 (vc_sign a)
-{
-  return vec_vclzb (a);
+  return vec_cntlz (a);
 }
 
 vc_uns vc_clz_4 (vc_uns a)
 {
-  return vec_vclz (a);
-}
-
-vc_uns vc_clz_5 (vc_uns a)
-{
-  return vec_vclzb (a);
+  return vec_cntlz (a);
 }
 
 vll_sign vll_popcnt_1 (vll_sign a)
@@ -126,24 +86,14 @@ vll_sign vll_popcnt_1 (vll_sign a)
   return __builtin_altivec_vpopcntd (a);
 }
 
-vll_sign vll_popcnt_2 (vll_sign a)
+vll_uns vll_popcnt_2 (vll_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vll_sign vll_popcnt_3 (vll_sign a)
-{
-  return vec_vpopcntd (a);
+  return vec_popcnt (a);
 }
 
 vll_uns vll_popcnt_4 (vll_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vll_uns vll_popcnt_5 (vll_uns a)
-{
-  return vec_vpopcntd (a);
+  return vec_popcnt (a);
 }
 
 vi_sign vi_popcnt_1 (vi_sign a)
@@ -151,24 +101,14 @@ vi_sign vi_popcnt_1 (vi_sign a)
   return __builtin_altivec_vpopcntw (a);
 }
 
-vi_sign vi_popcnt_2 (vi_sign a)
+vi_uns vi_popcnt_2 (vi_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vi_sign vi_popcnt_3 (vi_sign a)
-{
-  return vec_vpopcntw (a);
+  return vec_popcnt (a);
 }
 
 vi_uns vi_popcnt_4 (vi_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vi_uns vi_popcnt_5 (vi_uns a)
-{
-  return vec_vpopcntw (a);
+  return vec_popcnt (a);
 }
 
 vs_sign vs_popcnt_1 (vs_sign a)
@@ -176,24 +116,14 @@ vs_sign vs_popcnt_1 (vs_sign a)
   return __builtin_altivec_vpopcnth (a);
 }
 
-vs_sign vs_popcnt_2 (vs_sign a)
+vs_uns vs_popcnt_2 (vs_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vs_sign vs_popcnt_3 (vs_sign a)
-{
-  return vec_vpopcnth (a);
+  return vec_popcnt (a);
 }
 
 vs_uns vs_popcnt_4 (vs_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vs_uns vs_popcnt_5 (vs_uns a)
-{
-  return vec_vpopcnth (a);
+  return vec_popcnt (a);
 }
 
 vc_sign vc_popcnt_1 (vc_sign a)
@@ -201,24 +131,14 @@ vc_sign vc_popcnt_1 (vc_sign a)
   return __builtin_altivec_vpopcntb (a);
 }
 
-vc_sign vc_popcnt_2 (vc_sign a)
+vc_uns vc_popcnt_2 (vc_sign a)
 {
-  return vec_vpopcnt (a);
-}
-
-vc_sign vc_popcnt_3 (vc_sign a)
-{
-  return vec_vpopcntb (a);
+  return vec_popcnt (a);
 }
 
 vc_uns vc_popcnt_4 (vc_uns a)
 {
-  return vec_vpopcnt (a);
-}
-
-vc_uns vc_popcnt_5 (vc_uns a)
-{
-  return vec_vpopcntb (a);
+  return vec_popcnt (a);
 }
 
 vc_uns vc_gbb_1 (vc_uns a)
@@ -228,12 +148,12 @@ vc_uns vc_gbb_1 (vc_uns a)
 
 vc_sign vc_gbb_2 (vc_sign a)
 {
-  return vec_vgbbd (a);
+  return vec_gb (a);
 }
 
 vc_uns vc_gbb_3 (vc_uns a)
 {
-  return vec_vgbbd (a);
+  return vec_gb (a);
 }
 
 /* { dg-final { scan-assembler-times "vclzd" 	5 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
index fcfac7c50b1..f3035000fe7 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-builtin-7.c
@@ -10,22 +10,22 @@ typedef vector unsigned int	v_uns;
 
 v_sign even_sign (v_sign a, v_sign b)
 {
-  return vec_vmrgew (a, b);
+  return vec_mergee (a, b);
 }
 
 v_uns even_uns (v_uns a, v_uns b)
 {
-  return vec_vmrgew (a, b);
+  return vec_mergee (a, b);
 }
 
 v_sign odd_sign (v_sign a, v_sign b)
 {
-  return vec_vmrgow (a, b);
+  return vec_mergeo (a, b);
 }
 
 v_uns odd_uns (v_uns a, v_uns b)
 {
-  return vec_vmrgow (a, b);
+  return vec_mergeo (a, b);
 }
 
 /* { dg-final { scan-assembler-times "vmrgew" 2 } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-13 21:47 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-13 21:47 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:20bd4638aba09d1077f585a00e42d4cfb312fb38

commit 20bd4638aba09d1077f585a00e42d4cfb312fb38
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 13 15:47:32 2021 -0600

    rs6000: More bug fixes
    
    2021-01-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Fix thinko.
            * config/rs6000/rs6000-call.c (rs6000_invalid_new_builtin): Handle
            ENB_P10_64.
            (rs6000_new_builtin_is_supported_p): Likewise.
            (rs6000_expand_new_builtin): Likewise.
            (rs6000_init_builtins): Likewise.
            * config/rs6000/rs6000-gen-builtins.c (write_defines_file):
            Define _ARCH_PPC64_PWR9 when appropriate.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-7.c: Remove vec_lvx call and adjust
            counts.
            * gcc.target/powerpc/ctz-4.c: Don't use deprecated builtins.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def     | 26 ++++-----
 gcc/config/rs6000/rs6000-c.c                 |  2 +-
 gcc/config/rs6000/rs6000-call.c              | 14 +++++
 gcc/config/rs6000/rs6000-gen-builtins.c      |  3 +
 gcc/config/rs6000/rs6000-overload.def        | 84 ++++++++++++----------------
 gcc/testsuite/gcc.target/powerpc/altivec-7.c |  5 +-
 gcc/testsuite/gcc.target/powerpc/ctz-4.c     | 64 +++------------------
 7 files changed, 76 insertions(+), 122 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 68d1a7d361a..9c4470bf400 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -1087,28 +1087,28 @@
 
 ; Cell builtins.
 [cell]
-  pure vuc __builtin_altivec_lvlx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvlx (signed long long, const void *);
     LVLX altivec_lvlx {ldvec}
 
-  pure vuc __builtin_altivec_lvlxl (signed long long, const void *);
+  pure vsc __builtin_altivec_lvlxl (signed long long, const void *);
     LVLXL altivec_lvlxl {ldvec}
 
-  pure vuc __builtin_altivec_lvrx (signed long long, const void *);
+  pure vsc __builtin_altivec_lvrx (signed long long, const void *);
     LVRX altivec_lvrx {ldvec}
 
-  pure vuc __builtin_altivec_lvrxl (signed long long, const void *);
+  pure vsc __builtin_altivec_lvrxl (signed long long, const void *);
     LVRXL altivec_lvrxl {ldvec}
 
-  void __builtin_altivec_stvlx (vuc, signed long long, void *);
+  void __builtin_altivec_stvlx (vsc, signed long long, void *);
     STVLX altivec_stvlx {stvec}
 
-  void __builtin_altivec_stvlxl (vuc, signed long long, void *);
+  void __builtin_altivec_stvlxl (vsc, signed long long, void *);
     STVLXL altivec_stvlxl {stvec}
 
-  void __builtin_altivec_stvrx (vuc, signed long long, void *);
+  void __builtin_altivec_stvrx (vsc, signed long long, void *);
     STVRX altivec_stvrx {stvec}
 
-  void __builtin_altivec_stvrxl (vuc, signed long long, void *);
+  void __builtin_altivec_stvrxl (vsc, signed long long, void *);
     STVRXL altivec_stvrxl {stvec}
 
 
@@ -2681,10 +2681,10 @@
   const vuc __builtin_altivec_vsrv (vuc, vuc);
     VSRV vsrv {}
 
-  const signed int __builtin_scalar_byte_in_range (unsigned char, unsigned int);
+  const signed int __builtin_scalar_byte_in_range (unsigned int, unsigned int);
     CMPRB cmprb {}
 
-  const signed int __builtin_scalar_byte_in_either_range (unsigned char, unsigned int);
+  const signed int __builtin_scalar_byte_in_either_range (unsigned int, unsigned int);
     CMPRB2 cmprb2 {}
 
   const vull __builtin_vsx_extract4b (vuc, const int[0,12]);
@@ -2825,7 +2825,7 @@
   void __builtin_altivec_stxvl (vuc, void *, long long);
     STXVL stxvl {}
 
-  const signed int __builtin_scalar_byte_in_set (unsigned char, unsigned long long);
+  const signed int __builtin_scalar_byte_in_set (unsigned int, unsigned long long);
     CMPEQB cmpeqb {}
 
   pure vuc __builtin_vsx_lxvl (const void *, unsigned long long);
@@ -2904,10 +2904,10 @@
 
 ; Decimal floating-point builtins.
 [dfp]
-  const _Decimal64 __builtin_ddedpd (const int<0,2>, _Decimal64);
+  const _Decimal64 __builtin_ddedpd (const int<2>, _Decimal64);
     DDEDPD dfp_ddedpd_dd {}
 
-  const _Decimal128 __builtin_ddedpdq (const int<0,2>, _Decimal128);
+  const _Decimal128 __builtin_ddedpdq (const int<2>, _Decimal128);
     DDEDPDQ dfp_ddedpd_td {}
 
   const _Decimal64 __builtin_denbcd (const int<1>, _Decimal64);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 4e535e535ac..11099d21006 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2826,7 +2826,7 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	gcc_assert (instance != NULL);
 	tree fntype = rs6000_builtin_info_x[instance->bifid].fntype;
 	tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
-	tree parmtype1 = TREE_VALUE (TREE_CHAIN (parmtype0));
+	tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
 
 	if (rs6000_new_builtin_type_compatible (types[0], parmtype0)
 	    && rs6000_new_builtin_type_compatible (types[1], parmtype1))
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index fde516ab7cb..45ebdbe3f13 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -11771,6 +11771,10 @@ rs6000_invalid_new_builtin (enum rs6000_gen_builtins fncode)
     case ENB_P10:
       error ("%qs requires the %qs option", name, "-mcpu=power10");
       break;
+    case ENB_P10_64:
+      error ("%qs requires the %qs option and either the %qs or %qs option",
+	     name, "-mcpu=power10", "-m64", "-mpowerpc64");
+      break;
     case ENB_MMA:
       error ("%qs requires the %qs option", name, "-mmma");
       break;
@@ -14045,6 +14049,10 @@ rs6000_new_builtin_is_supported_p (enum rs6000_gen_builtins fncode)
       if (!TARGET_POWER10)
 	return false;
       break;
+    case ENB_P10_64:
+      if (!TARGET_POWER10 || !TARGET_POWERPC64)
+	return false;
+      break;
     case ENB_MMA:
       if (!TARGET_MMA)
 	return false;
@@ -15304,6 +15312,10 @@ rs6000_expand_new_builtin (tree exp, rtx target,
       if (!TARGET_POWER10)
 	return const0_rtx;
       break;
+    case ENB_P10_64:
+      if (!TARGET_POWER10 || !TARGET_POWERPC64)
+	return const0_rtx;
+      break;
     case ENB_MMA:
       if (!TARGET_MMA)
 	return const0_rtx;
@@ -15953,6 +15965,8 @@ rs6000_init_builtins (void)
 	    continue;
 	  if (e == ENB_P10 && !TARGET_POWER10)
 	    continue;
+	  if (e == ENB_P10_64 && (!TARGET_POWER10 || !TARGET_POWERPC64))
+	    continue;
 	  if (e == ENB_MMA && !TARGET_MMA)
 	    continue;
 	  tree fntype = rs6000_builtin_info_x[i].fntype;
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 8f129f47d8c..b75b29303dd 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -2768,6 +2768,9 @@ write_defines_file ()
 {
   fprintf (defines_file, "#ifndef _RS6000_VECDEFINES_H\n");
   fprintf (defines_file, "#define _RS6000_VECDEFINES_H 1\n\n");
+  fprintf (defines_file, "#if defined(_ARCH_PPC64) && defined (_ARCH_PWR9)\n");
+  fprintf (defines_file, "  #define _ARCH_PPC64_PWR9 1\n");
+  fprintf (defines_file, "#endif\n\n");
   for (int i = 0; i < num_ovld_stanzas; i++)
     if (strcmp (ovld_stanzas[i].extern_name, "SKIP"))
       {
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index ec884b63388..e80e163f8ec 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -730,7 +730,7 @@
     VCMPEQUD_P  VCMPEQUD_P_SB
 
 [VEC_CMPEQB, SKIP, __builtin_byte_in_set]
-  signed int __builtin_byte_in_set (unsigned char,  unsigned long long);
+  signed int __builtin_byte_in_set (unsigned int,  unsigned long long);
     CMPEQB
 
 ; #### XVCMPGESP{TARGET_VSX};VCMPGEFP
@@ -738,19 +738,19 @@
   vbc __builtin_vec_cmpge (vsc, vsc);
     CMPGE_16QI  CMPGE_16QI_VSC
   vbc __builtin_vec_cmpge (vuc, vuc);
-    CMPGE_16QI  CMPGE_16QI_VUC
+    CMPGE_U16QI  CMPGE_16QI_VUC
   vbs __builtin_vec_cmpge (vss, vss);
     CMPGE_8HI  CMPGE_8HI_VSS
   vbs __builtin_vec_cmpge (vus, vus);
-    CMPGE_8HI  CMPGE_8HI_VUS
+    CMPGE_U8HI  CMPGE_8HI_VUS
   vbi __builtin_vec_cmpge (vsi, vsi);
     CMPGE_4SI  CMPGE_4SI_VSI
   vbi __builtin_vec_cmpge (vui, vui);
-    CMPGE_4SI  CMPGE_4SI_VUI
+    CMPGE_U4SI  CMPGE_4SI_VUI
   vbll __builtin_vec_cmpge (vsll, vsll);
     CMPGE_2DI  CMPGE_2DI_VSLL
   vbll __builtin_vec_cmpge (vull, vull);
-    CMPGE_2DI  CMPGE_2DI_VULL
+    CMPGE_U2DI  CMPGE_2DI_VULL
   vbi __builtin_vec_cmpge (vf, vf);
     VCMPGEFP
   vbll __builtin_vec_cmpge (vd, vd);
@@ -1021,11 +1021,11 @@
     VCMPNEZW_P  VCMPNEZW_VUI_P
 
 [VEC_CMPRB, SKIP, __builtin_byte_in_range]
-  signed int __builtin_byte_in_range (unsigned char,  unsigned int);
+  signed int __builtin_byte_in_range (unsigned int, unsigned int);
     CMPRB
 
 [VEC_CMPRB2, SKIP, __builtin_byte_in_either_range]
-  signed int __builtin_byte_in_range (unsigned char,  unsigned int);
+  signed int __builtin_byte_in_range (unsigned int, unsigned int);
     CMPRB2
 
 [VEC_CNTLZ, vec_cntlz, __builtin_vec_vclz, _ARCH_PWR8]
@@ -4640,6 +4640,10 @@
     STXVD2X_V2DI  STXVD2X_ULL
   void __builtin_vec_vsx_st (vbll, signed long long, vbll *);
     STXVD2X_V2DI  STXVD2X_VBLL
+  void __builtin_vec_vsx_st (vsq, signed long long, signed __int128 *);
+    STXVD2X_V1TI  STXVD2X_SQ
+  void __builtin_vec_vsx_st (vuq, signed long long, unsigned __int128 *);
+    STXVD2X_V1TI  STXVD2X_UQ
   void __builtin_vec_vsx_st (vf, signed long long, vf *);
     STXVW4X_V4SF  STXVW4X_VF
   void __builtin_vec_vsx_st (vf, signed long long, float *);
@@ -4651,67 +4655,49 @@
 
 [VEC_XST_BE, vec_xst_be, __builtin_vec_xst_be, __VSX__]
   void __builtin_vec_xst_be (vsc, signed long long, vsc *);
-    STXVW4X_V16QI  STXVW4X_VSC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_VSC
   void __builtin_vec_xst_be (vsc, signed long long, signed char *);
-    STXVW4X_V16QI  STXVW4X_SC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_SC_
   void __builtin_vec_xst_be (vuc, signed long long, vuc *);
-    STXVW4X_V16QI  STXVW4X_VUC_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_VUC
   void __builtin_vec_xst_be (vuc, signed long long, unsigned char *);
-    STXVW4X_V16QI  STXVW4X_UC_BE
-  void __builtin_vec_xst_be (vbc, signed long long, vbc *);
-    STXVW4X_V16QI  STXVW4X_VBC_BE
-  void __builtin_vec_xst_be (vbc, signed long long, signed char *);
-    STXVW4X_V16QI  STXVW4X_VBC_S_BE
-  void __builtin_vec_xst_be (vbc, signed long long, unsigned char *);
-    STXVW4X_V16QI  STXVW4X_VBC_U_BE
+    ST_ELEMREV_V16QI  ST_ELEMREV_UC
   void __builtin_vec_xst_be (vss, signed long long, vss *);
-    STXVW4X_V8HI  STXVW4X_VSS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_VSS
   void __builtin_vec_xst_be (vss, signed long long, signed short *);
-    STXVW4X_V8HI  STXVW4X_SS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_SS
   void __builtin_vec_xst_be (vus, signed long long, vus *);
-    STXVW4X_V8HI  STXVW4X_VUS_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_VUS
   void __builtin_vec_xst_be (vus, signed long long, unsigned short *);
-    STXVW4X_V8HI  STXVW4X_US_BE
-  void __builtin_vec_xst_be (vbs, signed long long, vbs *);
-    STXVW4X_V8HI  STXVW4X_VBS_BE
-  void __builtin_vec_xst_be (vbs, signed long long, signed short *);
-    STXVW4X_V8HI  STXVW4X_VBS_S_BE
-  void __builtin_vec_xst_be (vbs, signed long long, unsigned short *);
-    STXVW4X_V8HI  STXVW4X_VBS_U_BE
-  void __builtin_vec_xst_be (vp, signed long long, vp *);
-    STXVW4X_V8HI  STXVW4X_VP_BE
+    ST_ELEMREV_V8HI  ST_ELEMREV_US
   void __builtin_vec_xst_be (vsi, signed long long, vsi *);
-    STXVW4X_V4SI  STXVW4X_VSI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_VSI
   void __builtin_vec_xst_be (vsi, signed long long, signed int *);
-    STXVW4X_V4SI  STXVW4X_SI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_SI
   void __builtin_vec_xst_be (vui, signed long long, vui *);
-    STXVW4X_V4SI  STXVW4X_VUI_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_VUI
   void __builtin_vec_xst_be (vui, signed long long, unsigned int *);
-    STXVW4X_V4SI  STXVW4X_UI_BE
-  void __builtin_vec_xst_be (vbi, signed long long, vbi *);
-    STXVW4X_V4SI  STXVW4X_VBI_BE
-  void __builtin_vec_xst_be (vbi, signed long long, signed int *);
-    STXVW4X_V4SI  STXVW4X_VBI_S_BE
-  void __builtin_vec_xst_be (vbi, signed long long, unsigned int *);
-    STXVW4X_V4SI  STXVW4X_VBI_U_BE
+    ST_ELEMREV_V4SI  ST_ELEMREV_UI
   void __builtin_vec_xst_be (vsll, signed long long, vsll *);
-    STXVD2X_V2DI  STXVD2X_VSLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_VSLL
   void __builtin_vec_xst_be (vsll, signed long long, signed long long *);
-    STXVD2X_V2DI  STXVD2X_SLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_SLL
   void __builtin_vec_xst_be (vull, signed long long, vull *);
-    STXVD2X_V2DI  STXVD2X_VULL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_VULL
   void __builtin_vec_xst_be (vull, signed long long, unsigned long long *);
-    STXVD2X_V2DI  STXVD2X_ULL_BE
-  void __builtin_vec_xst_be (vbll, signed long long, vbll *);
-    STXVD2X_V2DI  STXVD2X_VBLL_BE
+    ST_ELEMREV_V2DI  ST_ELEMREV_ULL
+  void __builtin_vec_xst_be (vsq, signed long long, signed __int128 *);
+    ST_ELEMREV_V1TI  ST_ELEMREV_SQ
+  void __builtin_vec_xst_be (vuq, signed long long, unsigned __int128 *);
+    ST_ELEMREV_V1TI  ST_ELEMREV_UQ
   void __builtin_vec_xst_be (vf, signed long long, vf *);
-    STXVW4X_V4SF  STXVW4X_VF_BE
+    ST_ELEMREV_V4SF  ST_ELEMREV_VF
   void __builtin_vec_xst_be (vf, signed long long, float *);
-    STXVW4X_V4SF  STXVW4X_F_BE
+    ST_ELEMREV_V4SF  ST_ELEMREV_F
   void __builtin_vec_xst_be (vd, signed long long, vd *);
-    STXVD2X_V2DF  STXVD2X_VD_BE
+    ST_ELEMREV_V2DF  ST_ELEMREV_VD
   void __builtin_vec_xst_be (vd, signed long long, double *);
-    STXVD2X_V2DF  STXVD2X_D_BE
+    ST_ELEMREV_V2DF  ST_ELEMREV_D
 
 [VEC_XST_LEN_R, vec_xst_len_r, __builtin_vec_xst_len_r, _ARCH_PPC64_PWR9]
   void __builtin_vsx_xst_len_r (vuc, unsigned char *, unsigned long long);
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 0cef426fcd9..46bf7148b20 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -41,7 +41,6 @@ int main ()
   *vecushort++ = vec_xor((vector bool short)vecshort[0], vecushort[1]);
   *vecushort++ = vec_xor(vecushort[0], (vector bool short)vecshort[1]);
   *vecuint++ = vec_ld(var_int[0], uintp[1]);
-  *vecuint++ = vec_lvx(var_int[0], uintp[1]);
   *vecuint++ = vec_msum(vecuchar[0], vecuchar[1], vecuint[2]);
   *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]);
 
@@ -79,10 +78,10 @@ int main ()
      vec_ld                         lvx
 */
 
-/* { dg-final { scan-assembler-times "vpkpx" 2 } } */
+/* { dg-final { scan-assembler-times "vpkpx" 1 } } */
 /* { dg-final { scan-assembler-times "vmulesb" 1 } } */
 /* { dg-final { scan-assembler-times "vmulosb" 1 } } */
-/* { dg-final { scan-assembler-times {\mlvx\M} 42 { target { ! powerpc_vsx } } } } */
+/* { dg-final { scan-assembler-times {\mlvx\M} 39 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/ctz-4.c b/gcc/testsuite/gcc.target/powerpc/ctz-4.c
index 74d305a8fbc..8e5f7699a63 100644
--- a/gcc/testsuite/gcc.target/powerpc/ctz-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/ctz-4.c
@@ -8,97 +8,49 @@
 vector signed char
 count_trailing_zeros_v16qi_1s (vector signed char a)
 {
-  return vec_vctz (a);
-}
-
-vector signed char
-count_trailing_zeros_v16qi_2s (vector signed char a)
-{
-  return vec_vctzb (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned char
 count_trailing_zeros_v16qi_1u (vector unsigned char a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned char
-count_trailing_zeros_v16qi_2u (vector unsigned char a)
-{
-  return vec_vctzb (a);
+  return vec_cnttz (a);
 }
 
 vector short
 count_trailing_zeros_v8hi_1s (vector short a)
 {
-  return vec_vctz (a);
-}
-
-vector short
-count_trailing_zeros_v8hi_2s (vector short a)
-{
-  return vec_vctzh (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned short
 count_trailing_zeros_v8hi_1u (vector unsigned short a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned short
-count_trailing_zeros_v8hi_2u (vector unsigned short a)
-{
-  return vec_vctzh (a);
+  return vec_cnttz (a);
 }
 
 vector int
 count_trailing_zeros_v4si_1s (vector int a)
 {
-  return vec_vctz (a);
-}
-
-vector int
-count_trailing_zeros_v4si_2s (vector int a)
-{
-  return vec_vctzw (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned int
 count_trailing_zeros_v4si_1u (vector unsigned int a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned int
-count_trailing_zeros_v4si_2u (vector unsigned int a)
-{
-  return vec_vctzw (a);
+  return vec_cnttz (a);
 }
 
 vector long long
 count_trailing_zeros_v2di_1s (vector long long a)
 {
-  return vec_vctz (a);
-}
-
-vector long long
-count_trailing_zeros_v2di_2s (vector long long a)
-{
-  return vec_vctzd (a);
+  return vec_cnttz (a);
 }
 
 vector unsigned long long
 count_trailing_zeros_v2di_1u (vector unsigned long long a)
 {
-  return vec_vctz (a);
-}
-
-vector unsigned long long
-count_trailing_zeros_v2di_2u (vector unsigned long long a)
-{
-  return vec_vctzd (a);
+  return vec_cnttz (a);
 }
 
 /* { dg-final { scan-assembler "vctzb" } } */


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-13 14:58 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-13 14:58 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:c960c4d15be4a8bb91185c562eb97d23d08d34e2

commit c960c4d15be4a8bb91185c562eb97d23d08d34e2
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 13 08:58:23 2021 -0600

    rs6000: More bug fixes
    
    2021-01-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def: Assorted fixes.
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Remove incorrect
            gcc_assert.
            * config/rs6000/rs6000-call.c (rs6000_init_builtins): Fix
            initialization of ptr_intTI_type_node and ptr_uintTI_type_node.
            * config/rs6000/rs6000-gen-builtins.c (typeinfo): Remove isopaque.
            (match_type): Remove vop handling.
            (construct_fntype_id): Remove isopaque handling.
            (parse_ovld_entry): Commentary update.
            * config/rs6000/rs6000-overload.def: Assorted fixes.
    
    gcc/testsuite/
            * gcc.dg/vmx/ops.c: Remove deprecated calls.
            * gcc.target/powerpc/altivec-7.c: Likewise.
            * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Adjust.
            * gcc.target/powerpc/builtins-3-p9-runnable.c: Adjust.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def           | 173 ++++++++++-----------
 gcc/config/rs6000/rs6000-c.c                       |   1 -
 gcc/config/rs6000/rs6000-call.c                    |   5 +-
 gcc/config/rs6000/rs6000-gen-builtins.c            |  49 ++----
 gcc/config/rs6000/rs6000-overload.def              |  47 +++---
 gcc/testsuite/gcc.dg/vmx/ops.c                     |  86 ----------
 gcc/testsuite/gcc.target/powerpc/altivec-7.c       |  29 ++--
 .../gcc.target/powerpc/bfp/scalar-test-neg-2.c     |   2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-3.c     |   2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-5.c     |   2 +-
 .../gcc.target/powerpc/builtins-3-p9-runnable.c    |   8 +-
 11 files changed, 139 insertions(+), 265 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 6fa121bb38d..68d1a7d361a 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -81,7 +81,6 @@
 ;   vp		vector pixel
 ;   vf		vector float
 ;   vd		vector double
-;   vop		opaque vector (matches all vectors)
 ;
 ; For simplicity, We don't support "short int" and "long long int".
 ; We don't currently support a <basetype> of "bool", "long double",
@@ -127,30 +126,20 @@
 ;
 ; It is important to note that each entry's <bif-name> must be
 ; unique.  The code generated from this file will call def_builtin
-; for each entry, and this can only happen once per name.  This
-; means that in some cases we currently retain some tricks from
-; the old builtin support to aid with overloading.  This 
-; unfortunately seems to be necessary for backward compatibility.
+; for each entry, and this can only happen once per name.
 ;
-; The two tricks at our disposal are the void pointer and the "vop"
-; vector type.  We use void pointers anywhere that pointer types
-; are accepted (primarily for vector load/store built-ins).  In
-; practice this means that we accept pointers to anything, not
-; just to the types that we intend.  We use the "vop" vector type
-; anytime that a built-in must accept vector types that have
-; different modes.  This is an opaque type that will match any
-; vector type, which may mean matching vector types that we don't
-; intend.
+; The type signature for the builtin must match the modes of the RTL
+; pattern <bif-pattern>.  When a builtin is used only as a basis for
+; overloading, you can use an arbitrary type for each mode (for example,
+; for V8HImode, you could use vp, vss, vus, or vbs).  The overloading
+; machinery takes care of adding appropriate casts between vectors to
+; satisfy impedance matching.  The overloaded prototypes are the ones
+; that must match what users expect.  Thus you will often have a small
+; number of entries in this file that correspond to a much greater
+; number of entries in rs6000-overload.def.
 ;
-; We can improve on "vop" when a vector argument or return type is
-; limited to one mode.  For example, "vsll" and "vull" both map to
-; V2DImode.  In this case, we can arbitrarily pick one of the
-; acceptable types to use in the prototype.  The signature used by
-; def_builtin is based on modes, not types, so this works well.
-; Only use "vop" when there is no alternative.  When there is a
-; choice, best practice is to use the signed type ("vsll" in the
-; example above) unless the choices are unsigned and bool, in
-; which case the unsigned type should be used.
+; However, builtins in this file that are expected to be directly called
+; by users must have one version for each expected type combination.
 ;
 ; Eventually we want to automatically generate built-in documentation
 ; from the entries in this file.  Documenting of built-ins with more
@@ -354,12 +343,24 @@
   vuc __builtin_altivec_mask_for_load (const void *);
     MASK_FOR_LOAD altivec_lvsr_direct {ldstmask}
 
-  vus __builtin_altivec_mfvscr ();
+  vss __builtin_altivec_mfvscr ();
     MFVSCR altivec_mfvscr {}
 
-  void __builtin_altivec_mtvscr (vop);
+  void __builtin_altivec_mtvscr (vsi);
     MTVSCR altivec_mtvscr {}
 
+  const vsll __builtin_altivec_vmulesw (vsi, vsi);
+    VMULESW vec_widen_smult_even_v4si {}
+
+  const vull __builtin_altivec_vmuleuw (vui, vui);
+    VMULEUW vec_widen_umult_even_v4si {}
+
+  const vsll __builtin_altivec_vmulosw (vsi, vsi);
+    VMULOSW vec_widen_smult_odd_v4si {}
+
+  const vull __builtin_altivec_vmulouw (vui, vui);
+    VMULOUW vec_widen_umult_odd_v4si {}
+
   const vsc __builtin_altivec_nabs_v16qi (vsc);
     NABS_V16QI nabsv16qi2 {}
 
@@ -441,7 +442,7 @@
   const vus __builtin_altivec_vadduhs (vus, vus);
     VADDUHS altivec_vadduhs {}
 
-  const vui __builtin_altivec_vadduwm (vui, vui);
+  const vsi __builtin_altivec_vadduwm (vsi, vsi);
     VADDUWM addv4si3 {}
 
   const vui __builtin_altivec_vadduws (vui, vui);
@@ -528,19 +529,19 @@
   const vsc __builtin_altivec_vcmpequb (vuc, vuc);
     VCMPEQUB vector_eqv16qi {}
 
-  const int __builtin_altivec_vcmpequb_p (int, vuc, vuc);
+  const int __builtin_altivec_vcmpequb_p (int, vsc, vsc);
     VCMPEQUB_P vector_eq_v16qi_p {pred}
 
   const vss __builtin_altivec_vcmpequh (vus, vus);
     VCMPEQUH vector_eqv8hi {}
 
-  const int __builtin_altivec_vcmpequh_p (int, vus, vus);
+  const int __builtin_altivec_vcmpequh_p (int, vss, vss);
     VCMPEQUH_P vector_eq_v8hi_p {pred}
 
   const vsi __builtin_altivec_vcmpequw (vui, vui);
     VCMPEQUW vector_eqv4si {}
 
-  const int __builtin_altivec_vcmpequw_p (int, vui, vui);
+  const int __builtin_altivec_vcmpequw_p (int, vsi, vsi);
     VCMPEQUW_P vector_eq_v4si_p {pred}
 
   const vf __builtin_altivec_vcmpgefp (vf, vf);
@@ -576,19 +577,19 @@
   const vsc __builtin_altivec_vcmpgtub (vuc, vuc);
     VCMPGTUB vector_gtuv16qi {}
 
-  const int __builtin_altivec_vcmpgtub_p (int, vuc, vuc);
+  const int __builtin_altivec_vcmpgtub_p (int, vsc, vsc);
     VCMPGTUB_P vector_gtu_v16qi_p {pred}
 
   const vss __builtin_altivec_vcmpgtuh (vus, vus);
     VCMPGTUH vector_gtuv8hi {}
 
-  const int __builtin_altivec_vcmpgtuh_p (int, vus, vus);
+  const int __builtin_altivec_vcmpgtuh_p (int, vss, vss);
     VCMPGTUH_P vector_gtu_v8hi_p {pred}
 
   const vsi __builtin_altivec_vcmpgtuw (vui, vui);
     VCMPGTUW vector_gtuv4si {}
 
-  const int __builtin_altivec_vcmpgtuw_p (int, vui, vui);
+  const int __builtin_altivec_vcmpgtuw_p (int, vsi, vsi);
     VCMPGTUW_P vector_gtu_v4si_p {pred}
 
   const vsi __builtin_altivec_vctsxs (vf, const int<5>);
@@ -873,7 +874,7 @@
   const vuq __builtin_altivec_vsel_1ti_uns (vuq, vuq, vuq);
     VSEL_1TI_UNS vector_select_v1ti_uns {}
 
-  const vf __builtin_altivec_vsel_4sf (vf, vf, vui);
+  const vf __builtin_altivec_vsel_4sf (vf, vf, vf);
     VSEL_4SF vector_select_v4sf {}
 
   const vsi __builtin_altivec_vsel_4si (vsi, vsi, vui);
@@ -888,7 +889,7 @@
   const vus __builtin_altivec_vsel_8hi_uns (vus, vus, vus);
     VSEL_8HI_UNS vector_select_v8hi_uns {}
 
-  const vop __builtin_altivec_vsl (vop, vuc);
+  const vsi __builtin_altivec_vsl (vsi, vsi);
     VSL altivec_vsl {}
 
   const vsc __builtin_altivec_vslb (vsc, vuc);
@@ -909,7 +910,7 @@
   const vss __builtin_altivec_vslh (vss, vus);
     VSLH vashlv8hi3 {}
 
-  const vop __builtin_altivec_vslo (vop, vuc);
+  const vsi __builtin_altivec_vslo (vsi, vsi);
     VSLO altivec_vslo {}
 
   const vsi __builtin_altivec_vslw (vsi, vui);
@@ -933,7 +934,7 @@
   const vsi __builtin_altivec_vspltw (vsi, const int<2>);
     VSPLTW altivec_vspltw {}
 
-  const vop __builtin_altivec_vsr (vop, vop);
+  const vsi __builtin_altivec_vsr (vsi, vsi);
     VSR altivec_vsr {}
 
   const vsc __builtin_altivec_vsrab (vsc, vuc);
@@ -951,7 +952,7 @@
   const vss __builtin_altivec_vsrh (vss, vus);
     VSRH vlshrv8hi3 {}
 
-  const vop __builtin_altivec_vsro (vop, vop);
+  const vsi __builtin_altivec_vsro (vsi, vsi);
     VSRO altivec_vsro {}
 
   const vsi __builtin_altivec_vsrw (vsi, vui);
@@ -1086,28 +1087,28 @@
 
 ; Cell builtins.
 [cell]
-  pure vop __builtin_altivec_lvlx (signed long long, const void *);
+  pure vuc __builtin_altivec_lvlx (signed long long, const void *);
     LVLX altivec_lvlx {ldvec}
 
-  pure vop __builtin_altivec_lvlxl (signed long long, const void *);
+  pure vuc __builtin_altivec_lvlxl (signed long long, const void *);
     LVLXL altivec_lvlxl {ldvec}
 
-  pure vop __builtin_altivec_lvrx (signed long long, const void *);
+  pure vuc __builtin_altivec_lvrx (signed long long, const void *);
     LVRX altivec_lvrx {ldvec}
 
-  pure vop __builtin_altivec_lvrxl (signed long long, const void *);
+  pure vuc __builtin_altivec_lvrxl (signed long long, const void *);
     LVRXL altivec_lvrxl {ldvec}
 
-  void __builtin_altivec_stvlx (vop, signed long long, void *);
+  void __builtin_altivec_stvlx (vuc, signed long long, void *);
     STVLX altivec_stvlx {stvec}
 
-  void __builtin_altivec_stvlxl (vop, signed long long, void *);
+  void __builtin_altivec_stvlxl (vuc, signed long long, void *);
     STVLXL altivec_stvlxl {stvec}
 
-  void __builtin_altivec_stvrx (vop, signed long long, void *);
+  void __builtin_altivec_stvrx (vuc, signed long long, void *);
     STVRX altivec_stvrx {stvec}
 
-  void __builtin_altivec_stvrxl (vop, signed long long, void *);
+  void __builtin_altivec_stvrxl (vuc, signed long long, void *);
     STVRXL altivec_stvrxl {stvec}
 
 
@@ -1167,6 +1168,24 @@
   const vull __builtin_altivec_vandc_v2di_uns (vull, vull);
     VANDC_V2DI_UNS andcv2di3 {}
 
+  const vbll __builtin_altivec_vcmpequd (vull, vull);
+    VCMPEQUD vector_eqv2di {}
+
+  const int __builtin_altivec_vcmpequd_p (int, vsll, vsll);
+    VCMPEQUD_P vector_eq_v2di_p {pred}
+
+  const vsll __builtin_altivec_vcmpgtsd (vsll, vsll);
+    VCMPGTSD vector_gtv2di {}
+
+  const int __builtin_altivec_vcmpgtsd_p (int, vsll, vsll);
+    VCMPGTSD_P vector_gt_v2di_p {pred}
+
+  const vsll __builtin_altivec_vcmpgtud (vull, vull);
+    VCMPGTUD vector_gtuv2di {}
+
+  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
+    VCMPGTUD_P vector_gtu_v2di_p {pred}
+
   const vd __builtin_altivec_vnor_v2df (vd, vd);
     VNOR_V2DF norv2df3 {}
 
@@ -1717,11 +1736,11 @@
     XVCVSXWDP vsx_xvcvsxwdp {}
 
 ; Need to pick one or the other here!!  ####
-; Second one is used in the overload table (old and new) for VEC_FLOAT.
-;  const vf __builtin_vsx_xvcvsxwsp (vsi);
-;    XVCVSXWSP vsx_floatv4siv4sf2 {}
+; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvsxwsp (vsi);
-    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
+    XVCVSXWSP vsx_floatv4siv4sf2 {}
+;  const vf __builtin_vsx_xvcvsxwsp (vsi);
+;    XVCVSXWSP_V4SF vsx_xvcvsxwdp {}
 
   const vd __builtin_vsx_xvcvuxddp (vull);
     XVCVUXDDP vsx_floatunsv2div2df2 {}
@@ -1740,11 +1759,11 @@
     XVCVUXWDP vsx_xvcvuxwdp {}
 
 ; Need to pick one or the other here!! ####
-; Second one is used in the overload table (old and new) for VEC_FLOAT.
-;  const vf __builtin_vsx_xvcvuxwsp (vui);
-;    XVCVUXWSP vsx_floatunsv4siv4sf2 {}
+; The first is needed to make vec_float work correctly.
   const vf __builtin_vsx_xvcvuxwsp (vui);
-    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
+    XVCVUXWSP vsx_floatunsv4siv4sf2 {}
+;  const vf __builtin_vsx_xvcvuxwsp (vui);
+;    XVCVUXWSP_V4SF vsx_xvcvuxwsp {}
 
   fpmath vd __builtin_vsx_xvdivdp (vd, vd);
     XVDIVDP divv2df3 {}
@@ -2199,24 +2218,6 @@
   const vuc __builtin_altivec_vbpermq2 (vuc, vuc);
     VBPERMQ2 altivec_vbpermq2 {}
 
-  const vbll __builtin_altivec_vcmpequd (vull, vull);
-    VCMPEQUD vector_eqv2di {}
-
-  const int __builtin_altivec_vcmpequd_p (int, vsll, vsll);
-    VCMPEQUD_P vector_eq_v2di_p {pred}
-
-  const vsll __builtin_altivec_vcmpgtsd (vsll, vsll);
-    VCMPGTSD vector_gtv2di {}
-
-  const int __builtin_altivec_vcmpgtsd_p (int, vsll, vsll);
-    VCMPGTSD_P vector_gt_v2di_p {pred}
-
-  const vsll __builtin_altivec_vcmpgtud (vull, vull);
-    VCMPGTUD vector_gtuv2di {}
-
-  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
-    VCMPGTUD_P vector_gtu_v2di_p {pred}
-
   const vsll __builtin_altivec_vmaxsd (vsll, vsll);
     VMAXSD smaxv2di3 {}
 
@@ -2253,18 +2254,6 @@
   const vsi __builtin_altivec_vmrgow_v4si (vsi, vsi);
     VMRGOW_V4SI p8_vmrgow_v4si {}
 
-  const vsll __builtin_altivec_vmulesw (vsi, vsi);
-    VMULESW vec_widen_smult_even_v4si {}
-
-  const vull __builtin_altivec_vmuleuw (vui, vui);
-    VMULEUW vec_widen_umult_even_v4si {}
-
-  const vsll __builtin_altivec_vmulosw (vsi, vsi);
-    VMULOSW vec_widen_smult_odd_v4si {}
-
-  const vull __builtin_altivec_vmulouw (vui, vui);
-    VMULOUW vec_widen_umult_odd_v4si {}
-
   const vsc __builtin_altivec_vpermxor (vsc, vsc, vsc);
     VPERMXOR altivec_vpermxor {}
 
@@ -2296,13 +2285,13 @@
 ;  const vull __builtin_altivec_vpmsumw (vui, vui);
 ;    VPMSUMW crypto_vpmsumw {}
 
-  const vsc __builtin_altivec_vpopcntb (vsc);
+  const vuc __builtin_altivec_vpopcntb (vsc);
     VPOPCNTB popcountv16qi2 {}
 
-  const vsll __builtin_altivec_vpopcntd (vsll);
+  const vull __builtin_altivec_vpopcntd (vsll);
     VPOPCNTD popcountv2di2 {}
 
-  const vss __builtin_altivec_vpopcnth (vss);
+  const vus __builtin_altivec_vpopcnth (vss);
     VPOPCNTH popcountv8hi2 {}
 
   const vuc __builtin_altivec_vpopcntub (vuc);
@@ -2317,7 +2306,7 @@
   const vui __builtin_altivec_vpopcntuw (vui);
     VPOPCNTUW popcountv4si2 {}
 
-  const vsi __builtin_altivec_vpopcntw (vsi);
+  const vui __builtin_altivec_vpopcntw (vsi);
     VPOPCNTW popcountv4si2 {}
 
   const vsll __builtin_altivec_vrld (vsll, vull);
@@ -2716,10 +2705,10 @@
   const vuc __builtin_vsx_insert4b (vsi, vuc, const int[0,12]);
     INSERT4B insert4b {}
 
-  const vd __builtin_vsx_insert_exp_dp (vop, vull);
+  const vd __builtin_vsx_insert_exp_dp (vd, vd);
     VIEDP xviexpdp {}
 
-  const vf __builtin_vsx_insert_exp_sp (vop, vui);
+  const vf __builtin_vsx_insert_exp_sp (vf, vf);
     VIESP xviexpsp {}
 
   const signed int __builtin_vsx_scalar_cmp_exp_dp_eq (double, double);
@@ -2833,13 +2822,13 @@
   void __builtin_altivec_xst_len_r (vsc, void *, long long);
     XST_LEN_R xst_len_r {}
 
-  void __builtin_altivec_stxvl (vop, void *, long long);
+  void __builtin_altivec_stxvl (vuc, void *, long long);
     STXVL stxvl {}
 
   const signed int __builtin_scalar_byte_in_set (unsigned char, unsigned long long);
     CMPEQB cmpeqb {}
 
-  pure vop __builtin_vsx_lxvl (const void *, unsigned long long);
+  pure vuc __builtin_vsx_lxvl (const void *, unsigned long long);
     LXVL lxvl {}
 
   const unsigned int __builtin_vsx_scalar_extract_exp (double);
@@ -3374,7 +3363,7 @@
   const vus __builtin_vsx_xxblend_v8hi (vus, vus, vus);
     VXXBLEND_V8HI xxblend_v8hi {}
 
-  const vop __builtin_vsx_xxeval (vop, vop, vop, const int <8>);
+  const vull __builtin_vsx_xxeval (vull, vull, vull, const int <8>);
     XXEVAL xxeval {}
 
   const vuc __builtin_vsx_xxgenpcvm_v16qi (vuc, const int <2>);
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 1de614ba2b3..4e535e535ac 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2947,7 +2947,6 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 		break;
 	      }
 	  }
-	gcc_assert (unsupported_builtin);
       }
 
     if (unsupported_builtin)
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index c96410b411b..fde516ab7cb 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -15624,6 +15624,7 @@ rs6000_init_builtins (void)
     = build_pointer_type (build_qualified_type (unsigned_V4SI_type_node,
 						TYPE_QUAL_CONST));
 
+  /* #### Should just always be long long???  */
   unsigned_V2DI_type_node = rs6000_vector_type (TARGET_POWERPC64
 				       ? "__vector unsigned long"
 				       : "__vector unsigned long long",
@@ -15711,10 +15712,10 @@ rs6000_init_builtins (void)
     = build_pointer_type (build_qualified_type (uintDI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_intTI_type_node
-    = build_pointer_type (build_qualified_type (intDI_type_internal_node,
+    = build_pointer_type (build_qualified_type (intTI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_uintTI_type_node
-    = build_pointer_type (build_qualified_type (uintDI_type_internal_node,
+    = build_pointer_type (build_qualified_type (uintTI_type_internal_node,
 						TYPE_QUAL_CONST));
   ptr_long_integer_type_node
     = build_pointer_type
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 6405b0f7a56..8f129f47d8c 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -317,7 +317,6 @@ struct typeinfo {
   char isbool;
   char ispixel;
   char ispointer;
-  char isopaque;
   basetype base;
   restriction restr;
   int val1;
@@ -474,7 +473,6 @@ static typemap type_map[TYPE_MAP_SIZE] =
     { "if",		"ibm128_float" },
     { "ld",		"long_double" },
     { "lg",		"long_integer" },
-    { "opaque", 	"opaque_V4SI" },
     { "pbv16qi",	"ptr_bool_V16QI" },
     { "pbv2di",		"ptr_bool_V2DI" },
     { "pbv4si",		"ptr_bool_V4SI" },
@@ -972,7 +970,6 @@ match_type (typeinfo *typedata, int voidok)
        vd	vector double
        v256	__vector_pair
        v512	__vector_quad
-       vop	opaque vector (matches all vectors)
 
      For simplicity, We don't support "short int" and "long long int".
      We don't support a <basetype> of "bool", "long double", or "_Float16",
@@ -1156,11 +1153,6 @@ match_type (typeinfo *typedata, int voidok)
       handle_pointer (typedata);
       return 1;
     }
-  else if (!strcmp (token, "vop"))
-    {
-      typedata->isopaque = 1;
-      return 1;
-    }
   else if (!strcmp (token, "signed"))
     typedata->issigned = 1;
   else if (!strcmp (token, "unsigned"))
@@ -1549,20 +1541,12 @@ construct_fntype_id (prototype *protoptr)
     buf[bufi++] = 'v';
   else
     {
-      if (protoptr->rettype.isopaque)
-	{
-	  memcpy (&buf[bufi], "opaque", 6);
-	  bufi += 6;
-	}
+      if (protoptr->rettype.isunsigned)
+	buf[bufi++] = 'u';
+      if (protoptr->rettype.isvector)
+	complete_vector_type (&protoptr->rettype, buf, &bufi);
       else
-	{
-	  if (protoptr->rettype.isunsigned)
-	    buf[bufi++] = 'u';
-	  if (protoptr->rettype.isvector)
-	    complete_vector_type (&protoptr->rettype, buf, &bufi);
-	  else
-	    complete_base_type (&protoptr->rettype, buf, &bufi);
-	}
+	complete_base_type (&protoptr->rettype, buf, &bufi);
     }
 
   memcpy (&buf[bufi], "_ftype", 6);
@@ -1608,21 +1592,13 @@ construct_fntype_id (prototype *protoptr)
 	      else
 		buf[bufi++] = 'p';
 	    }
-	  if (argptr->info.isopaque)
-	    {
-	      assert (!argptr->info.ispointer);
-	      memcpy (&buf[bufi], "opaque", 6);
-	      bufi += 6;
-	    }
+
+	  if (argptr->info.isunsigned)
+	    buf[bufi++] = 'u';
+	  if (argptr->info.isvector)
+	    complete_vector_type (&argptr->info, buf, &bufi);
 	  else
-	    {
-	      if (argptr->info.isunsigned)
-		buf[bufi++] = 'u';
-	      if (argptr->info.isvector)
-		complete_vector_type (&argptr->info, buf, &bufi);
-	      else
-		complete_base_type (&argptr->info, buf, &bufi);
-	    }
+	    complete_base_type (&argptr->info, buf, &bufi);
 	}
       assert (!argptr);
       }
@@ -1965,8 +1941,7 @@ parse_ovld_entry ()
 
   /* Check for an optional overload id.  Usually we use the builtin
      function id for that purpose, but sometimes we need multiple
-     overload entries for the same builtin id when we use opaque
-     vector parameter and return types, and it needs to be unique.  */
+     overload entries for the same builtin id, and it needs to be unique.  */
   consume_whitespace ();
   if (linebuf[pos] != '\n')
     {
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 66f5836c444..ec884b63388 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -257,7 +257,7 @@
     VADDUWM  VADDUWM_VSI_VBI
   vui __builtin_vec_add (vbi, vui);
     VADDUWM  VADDUWM_VBI_VUI
-  vui __builtin_vec_add (vbi, vui);
+  vui __builtin_vec_add (vui, vbi);
     VADDUWM  VADDUWM_VUI_VBI
   vsll __builtin_vec_add (vbll, vsll);
     VADDUDM  VADDUDM_VBLL_VSLL
@@ -382,7 +382,7 @@
     VAND_V16QI_UNS  VAND_VBC_VUC
   vss __builtin_vec_and (vss, vbs);
     VAND_V8HI  VAND_VSS_VBS
-  vss __builtin_vec_and (vss, vbs);
+  vss __builtin_vec_and (vbs, vss);
     VAND_V8HI  VAND_VBS_VSS
   vus __builtin_vec_and (vus, vbs);
     VAND_V8HI_UNS  VAND_VUS_VBS
@@ -1606,9 +1606,9 @@
 
 [VEC_FLOAT, vec_float, __builtin_vec_float]
   vf __builtin_vec_float (vsi);
-    XVCVSXWSP_V4SF
+    XVCVSXWSP
   vf __builtin_vec_float (vui);
-    XVCVUXWSP_V4SF
+    XVCVUXWSP
 
 [VEC_FLOAT2, vec_float2, __builtin_vec_float2]
   vf __builtin_vec_float2 (vsll, vsll);
@@ -1634,9 +1634,10 @@
   vf __builtin_vec_floato (vd);
     FLOATO_V2DF
 
+; #### XVRSPIM{TARGET_VSX}; VRFIM
 [VEC_FLOOR, vec_floor, __builtin_vec_floor]
   vf __builtin_vec_floor (vf);
-    XVRSPIM
+    VRFIM
   vd __builtin_vec_floor (vd);
     XVRDPIM
 
@@ -2118,7 +2119,7 @@
     VMLADDUHM  VMLADDUHM_VSSVUS
   vss __builtin_vec_madd (vus, vss, vss);
     VMLADDUHM  VMLADDUHM_VUSVSS
-  vus __builtin_vec_madd (vss, vus, vus);
+  vus __builtin_vec_madd (vus, vus, vus);
     VMLADDUHM  VMLADDUHM_VUS
   vf __builtin_vec_madd (vf, vf, vf);
     VMADDFP
@@ -2896,19 +2897,19 @@
     VPMSUMD  VPMSUMD_V
 
 [VEC_POPCNT, vec_popcnt, __builtin_vec_vpopcnt, _ARCH_PWR8]
-  vsc __builtin_vec_vpopcnt (vsc);
+  vuc __builtin_vec_vpopcnt (vsc);
     VPOPCNTB
   vuc __builtin_vec_vpopcnt (vuc);
     VPOPCNTUB
-  vss __builtin_vec_vpopcnt (vss);
+  vus __builtin_vec_vpopcnt (vss);
     VPOPCNTH
   vus __builtin_vec_vpopcnt (vus);
     VPOPCNTUH
-  vsi __builtin_vec_vpopcnt (vsi);
+  vui __builtin_vec_vpopcnt (vsi);
     VPOPCNTW
   vui __builtin_vec_vpopcnt (vui);
     VPOPCNTUW
-  vsll __builtin_vec_vpopcnt (vsll);
+  vull __builtin_vec_vpopcnt (vsll);
     VPOPCNTD
   vull __builtin_vec_vpopcnt (vull);
     VPOPCNTUD
@@ -3082,9 +3083,10 @@
   vull __builtin_vec_rlnm (vull, vull);
     VRLDNM
 
+; #### XVRSPI{TARGET_VSX};VRFIN
 [VEC_ROUND, vec_round, __builtin_vec_round]
   vf __builtin_vec_round (vf);
-    XVRSPI
+    VRFIN
   vd __builtin_vec_round (vd);
     XVRDPI
 
@@ -3193,11 +3195,11 @@
     VEC_VSIGNED2_V2DF
 
 [VEC_SIGNEDE, vec_signede, __builtin_vec_vsignede]
-  vui __builtin_vec_vsignede (vd);
+  vsi __builtin_vec_vsignede (vd);
     VEC_VSIGNEDE_V2DF
 
 [VEC_SIGNEDO, vec_signedo, __builtin_vec_vsignedo]
-  vui __builtin_vec_vsignedo (vd);
+  vsi __builtin_vec_vsignedo (vd);
     VEC_VSIGNEDO_V2DF
 
 [VEC_SL, vec_sl, __builtin_vec_sl]
@@ -3356,8 +3358,8 @@
     VSL  VSL_VBLL_VUC
   vbll __builtin_vec_sll (vbll, vus);
     VSL  VSL_VBLL_VUS
-  vbll __builtin_vec_sll (vbll, vui);
-    VSL  VSL_VBLL_VUI
+  vbll __builtin_vec_sll (vbll, vull);
+    VSL  VSL_VBLL_VULL
 
 [VEC_SLO, vec_slo, __builtin_vec_slo]
   vsc __builtin_vec_slo (vsc, vsc);
@@ -3686,14 +3688,10 @@
     STVX_V4SI  STVX_VSI
   void __builtin_vec_st (vsi, signed long long, signed int *);
     STVX_V4SI  STVX_SI
-  void __builtin_vec_st (vsi, signed long long, signed long *);
-    STVX_V4SI  STVX_SL
   void __builtin_vec_st (vui, signed long long, vui *);
     STVX_V4SI  STVX_VUI
   void __builtin_vec_st (vui, signed long long, unsigned int *);
     STVX_V4SI  STVX_UI
-  void __builtin_vec_st (vui, signed long long, unsigned long *);
-    STVX_V4SI  STVX_UL
   void __builtin_vec_st (vbi, signed long long, vbi *);
     STVX_V4SI  STVX_VBI
   void __builtin_vec_st (vbi, signed long long, signed int *);
@@ -4190,7 +4188,7 @@
 [VEC_SUM4S, vec_sum4s, __builtin_vec_sum4s]
   vui __builtin_vec_sum4s (vuc, vui);
     VSUM4UBS
-  vsi __builtin_vec_sum4s (vsc, vui);
+  vsi __builtin_vec_sum4s (vsc, vsi);
     VSUM4SBS
   vsi __builtin_vec_sum4s (vss, vsi);
     VSUM4SHS
@@ -4219,9 +4217,10 @@
   signed int __builtin_vec_xvtlsbb_all_zeros (vuc);
     XVTLSBB_ZEROS
 
+; #### XVRSPIZ{TARGET_VSX}; VRFIZ
 [VEC_TRUNC, vec_trunc, __builtin_vec_trunc]
   vf __builtin_vec_trunc (vf);
-    XVRSPIZ
+    VRFIZ
   vd __builtin_vec_trunc (vd);
     XVRDPIZ
 
@@ -4286,13 +4285,13 @@
     DOUBLEL_V4SF VUPKLF
 
 [VEC_UNSIGNED, vec_unsigned, __builtin_vec_vunsigned]
-  vsi __builtin_vec_vunsigned (vf);
+  vui __builtin_vec_vunsigned (vf);
     VEC_VUNSIGNED_V4SF
-  vsll __builtin_vec_vunsigned (vd);
+  vull __builtin_vec_vunsigned (vd);
     VEC_VUNSIGNED_V2DF
 
 [VEC_UNSIGNED2, vec_unsigned2, __builtin_vec_vunsigned2]
-  vsi __builtin_vec_vunsigned2 (vd, vd);
+  vui __builtin_vec_vunsigned2 (vd, vd);
     VEC_VUNSIGNED2_V2DF
 
 [VEC_UNSIGNEDE, vec_unsignede, __builtin_vec_vunsignede]
diff --git a/gcc/testsuite/gcc.dg/vmx/ops.c b/gcc/testsuite/gcc.dg/vmx/ops.c
index 735710819f9..b8f80930078 100644
--- a/gcc/testsuite/gcc.dg/vmx/ops.c
+++ b/gcc/testsuite/gcc.dg/vmx/ops.c
@@ -317,8 +317,6 @@ void f2() {
   *var_vec_b16++ = vec_cmpgt(var_vec_u16[0], var_vec_u16[1]);
   *var_vec_b16++ = vec_ld(var_int[0], var_vec_b16_ptr[1]);
   *var_vec_b16++ = vec_ldl(var_int[0], var_vec_b16_ptr[1]);
-  *var_vec_b16++ = vec_lvx(var_int[0], var_vec_b16_ptr[1]);
-  *var_vec_b16++ = vec_lvxl(var_int[0], var_vec_b16_ptr[1]);
   *var_vec_b16++ = vec_mergeh(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_mergel(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_nor(var_vec_b16[0], var_vec_b16[1]);
@@ -357,8 +355,6 @@ void f3() {
   *var_vec_b32++ = vec_cmpgt(var_vec_u32[0], var_vec_u32[1]);
   *var_vec_b32++ = vec_ld(var_int[0], var_vec_b32_ptr[1]);
   *var_vec_b32++ = vec_ldl(var_int[0], var_vec_b32_ptr[1]);
-  *var_vec_b32++ = vec_lvx(var_int[0], var_vec_b32_ptr[1]);
-  *var_vec_b32++ = vec_lvxl(var_int[0], var_vec_b32_ptr[1]);
   *var_vec_b32++ = vec_mergeh(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_mergel(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_nor(var_vec_b32[0], var_vec_b32[1]);
@@ -389,8 +385,6 @@ void f4() {
   *var_vec_b8++ = vec_cmpgt(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_b8++ = vec_ld(var_int[0], var_vec_b8_ptr[1]);
   *var_vec_b8++ = vec_ldl(var_int[0], var_vec_b8_ptr[1]);
-  *var_vec_b8++ = vec_lvx(var_int[0], var_vec_b8_ptr[1]);
-  *var_vec_b8++ = vec_lvxl(var_int[0], var_vec_b8_ptr[1]);
 }
 void f5() {
   *var_vec_b8++ = vec_mergeh(var_vec_b8[0], var_vec_b8[1]);
@@ -506,11 +500,6 @@ void f6() {
   *var_vec_f32++ = vec_ldl(var_int[0], var_float_ptr[1]);
   *var_vec_f32++ = vec_ldl(var_int[0], var_vec_f32_ptr[1]);
   *var_vec_f32++ = vec_loge(var_vec_f32[0]);
-  *var_vec_f32++ = vec_lvewx(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvx(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvx(var_int[0], var_vec_f32_ptr[1]);
-  *var_vec_f32++ = vec_lvxl(var_int[0], var_float_ptr[1]);
-  *var_vec_f32++ = vec_lvxl(var_int[0], var_vec_f32_ptr[1]);
   *var_vec_f32++ = vec_madd(var_vec_f32[0], var_vec_f32[1], var_vec_f32[2]);
   *var_vec_f32++ = vec_max(var_vec_f32[0], var_vec_f32[1]);
   *var_vec_f32++ = vec_mergeh(var_vec_f32[0], var_vec_f32[1]);
@@ -562,8 +551,6 @@ void f9() {
   *var_vec_f32++ = vec_xor(var_vec_f32[0], var_vec_f32[1]);
   *var_vec_p16++ = vec_ld(var_int[0], var_vec_p16_ptr[1]);
   *var_vec_p16++ = vec_ldl(var_int[0], var_vec_p16_ptr[1]);
-  *var_vec_p16++ = vec_lvx(var_int[0], var_vec_p16_ptr[1]);
-  *var_vec_p16++ = vec_lvxl(var_int[0], var_vec_p16_ptr[1]);
   *var_vec_p16++ = vec_mergeh(var_vec_p16[0], var_vec_p16[1]);
   *var_vec_p16++ = vec_mergel(var_vec_p16[0], var_vec_p16[1]);
   *var_vec_p16++ = vec_packpx(var_vec_u32[0], var_vec_u32[1]);
@@ -622,11 +609,6 @@ void f10() {
   *var_vec_s16++ = vec_lde(var_int[0], var_short_ptr[1]);
   *var_vec_s16++ = vec_ldl(var_int[0], var_short_ptr[1]);
   *var_vec_s16++ = vec_ldl(var_int[0], var_vec_s16_ptr[1]);
-  *var_vec_s16++ = vec_lvehx(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvx(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvx(var_int[0], var_vec_s16_ptr[1]);
-  *var_vec_s16++ = vec_lvxl(var_int[0], var_short_ptr[1]);
-  *var_vec_s16++ = vec_lvxl(var_int[0], var_vec_s16_ptr[1]);
   *var_vec_s16++ = vec_madds(var_vec_s16[0], var_vec_s16[1], var_vec_s16[2]);
   *var_vec_s16++ = vec_max(var_vec_b16[0], var_vec_s16[1]);
   *var_vec_s16++ = vec_max(var_vec_s16[0], var_vec_b16[1]);
@@ -787,11 +769,6 @@ void f13() {
   *var_vec_s32++ = vec_lde(var_int[0], var_int_ptr[1]);
   *var_vec_s32++ = vec_ldl(var_int[0], var_int_ptr[1]);
   *var_vec_s32++ = vec_ldl(var_int[0], var_vec_s32_ptr[1]);
-  *var_vec_s32++ = vec_lvewx(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvx(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvx(var_int[0], var_vec_s32_ptr[1]);
-  *var_vec_s32++ = vec_lvxl(var_int[0], var_int_ptr[1]);
-  *var_vec_s32++ = vec_lvxl(var_int[0], var_vec_s32_ptr[1]);
   *var_vec_s32++ = vec_max(var_vec_b32[0], var_vec_s32[1]);
   *var_vec_s32++ = vec_max(var_vec_s32[0], var_vec_b32[1]);
   *var_vec_s32++ = vec_max(var_vec_s32[0], var_vec_s32[1]);
@@ -919,11 +896,6 @@ void f17() {
   *var_vec_s8++ = vec_lde(var_int[0], var_signed_char_ptr[1]);
   *var_vec_s8++ = vec_ldl(var_int[0], var_signed_char_ptr[1]);
   *var_vec_s8++ = vec_ldl(var_int[0], var_vec_s8_ptr[1]);
-  *var_vec_s8++ = vec_lvebx(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvx(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvx(var_int[0], var_vec_s8_ptr[1]);
-  *var_vec_s8++ = vec_lvxl(var_int[0], var_signed_char_ptr[1]);
-  *var_vec_s8++ = vec_lvxl(var_int[0], var_vec_s8_ptr[1]);
   *var_vec_s8++ = vec_max(var_vec_b8[0], var_vec_s8[1]);
   *var_vec_s8++ = vec_max(var_vec_s8[0], var_vec_b8[1]);
   *var_vec_s8++ = vec_max(var_vec_s8[0], var_vec_s8[1]);
@@ -1050,11 +1022,6 @@ void f19() {
   *var_vec_u16++ = vec_lde(var_int[0], var_unsigned_short_ptr[1]);
   *var_vec_u16++ = vec_ldl(var_int[0], var_unsigned_short_ptr[1]);
   *var_vec_u16++ = vec_ldl(var_int[0], var_vec_u16_ptr[1]);
-  *var_vec_u16++ = vec_lvehx(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvx(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvx(var_int[0], var_vec_u16_ptr[1]);
-  *var_vec_u16++ = vec_lvxl(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u16++ = vec_lvxl(var_int[0], var_vec_u16_ptr[1]);
   *var_vec_u16++ = vec_max(var_vec_b16[0], var_vec_u16[1]);
   *var_vec_u16++ = vec_max(var_vec_u16[0], var_vec_b16[1]);
   *var_vec_u16++ = vec_max(var_vec_u16[0], var_vec_u16[1]);
@@ -1213,11 +1180,6 @@ void f22() {
   *var_vec_u32++ = vec_lde(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u32++ = vec_ldl(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u32++ = vec_ldl(var_int[0], var_vec_u32_ptr[1]);
-  *var_vec_u32++ = vec_lvewx(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvx(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvx(var_int[0], var_vec_u32_ptr[1]);
-  *var_vec_u32++ = vec_lvxl(var_int[0], var_unsigned_int_ptr[1]);
-  *var_vec_u32++ = vec_lvxl(var_int[0], var_vec_u32_ptr[1]);
   *var_vec_u32++ = vec_max(var_vec_b32[0], var_vec_u32[1]);
   *var_vec_u32++ = vec_max(var_vec_u32[0], var_vec_b32[1]);
   *var_vec_u32++ = vec_max(var_vec_u32[0], var_vec_u32[1]);
@@ -1341,7 +1303,6 @@ void f25() {
   *var_vec_u8++ = vec_lde(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_ldl(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_ldl(var_int[0], var_vec_u8_ptr[1]);
-  *var_vec_u8++ = vec_lvebx(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_float_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_int_ptr[1]);
   *var_vec_u8++ = vec_lvsl(var_int[0], var_short_ptr[1]);
@@ -1356,12 +1317,8 @@ void f25() {
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_char_ptr[1]);
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_int_ptr[1]);
   *var_vec_u8++ = vec_lvsr(var_int[0], var_unsigned_short_ptr[1]);
-  *var_vec_u8++ = vec_lvx(var_int[0], var_unsigned_char_ptr[1]);
-  *var_vec_u8++ = vec_lvx(var_int[0], var_vec_u8_ptr[1]);
 }
 void f26() {
-  *var_vec_u8++ = vec_lvxl(var_int[0], var_unsigned_char_ptr[1]);
-  *var_vec_u8++ = vec_lvxl(var_int[0], var_vec_u8_ptr[1]);
   *var_vec_u8++ = vec_max(var_vec_b8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_max(var_vec_u8[0], var_vec_b8[1]);
   *var_vec_u8++ = vec_max(var_vec_u8[0], var_vec_u8[1]);
@@ -2353,47 +2310,4 @@ void f37() {
   vec_stl(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
   vec_stl(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
   vec_stl(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
-  vec_stvebx(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvebx(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvehx(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvehx(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvewx(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvewx(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvewx(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvx(var_vec_b16[0], var_int[1], var_vec_b16_ptr[2]);
-  vec_stvx(var_vec_b32[0], var_int[1], var_vec_b32_ptr[2]);
-  vec_stvx(var_vec_b8[0], var_int[1], var_vec_b8_ptr[2]);
-  vec_stvx(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvx(var_vec_f32[0], var_int[1], var_vec_f32_ptr[2]);
-  vec_stvx(var_vec_p16[0], var_int[1], var_vec_p16_ptr[2]);
-  vec_stvx(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvx(var_vec_s16[0], var_int[1], var_vec_s16_ptr[2]);
-  vec_stvx(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvx(var_vec_s32[0], var_int[1], var_vec_s32_ptr[2]);
-  vec_stvx(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvx(var_vec_s8[0], var_int[1], var_vec_s8_ptr[2]);
-  vec_stvx(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvx(var_vec_u16[0], var_int[1], var_vec_u16_ptr[2]);
-  vec_stvx(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvx(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
-  vec_stvx(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvx(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
-  vec_stvxl(var_vec_b16[0], var_int[1], var_vec_b16_ptr[2]);
-  vec_stvxl(var_vec_b32[0], var_int[1], var_vec_b32_ptr[2]);
-  vec_stvxl(var_vec_b8[0], var_int[1], var_vec_b8_ptr[2]);
-  vec_stvxl(var_vec_f32[0], var_int[1], var_float_ptr[2]);
-  vec_stvxl(var_vec_f32[0], var_int[1], var_vec_f32_ptr[2]);
-  vec_stvxl(var_vec_p16[0], var_int[1], var_vec_p16_ptr[2]);
-  vec_stvxl(var_vec_s16[0], var_int[1], var_short_ptr[2]);
-  vec_stvxl(var_vec_s16[0], var_int[1], var_vec_s16_ptr[2]);
-  vec_stvxl(var_vec_s32[0], var_int[1], var_int_ptr[2]);
-  vec_stvxl(var_vec_s32[0], var_int[1], var_vec_s32_ptr[2]);
-  vec_stvxl(var_vec_s8[0], var_int[1], var_signed_char_ptr[2]);
-  vec_stvxl(var_vec_s8[0], var_int[1], var_vec_s8_ptr[2]);
-  vec_stvxl(var_vec_u16[0], var_int[1], var_unsigned_short_ptr[2]);
-  vec_stvxl(var_vec_u16[0], var_int[1], var_vec_u16_ptr[2]);
-  vec_stvxl(var_vec_u32[0], var_int[1], var_unsigned_int_ptr[2]);
-  vec_stvxl(var_vec_u32[0], var_int[1], var_vec_u32_ptr[2]);
-  vec_stvxl(var_vec_u8[0], var_int[1], var_unsigned_char_ptr[2]);
-  vec_stvxl(var_vec_u8[0], var_int[1], var_vec_u8_ptr[2]);
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-7.c b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
index 42c04a1ed79..0cef426fcd9 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-7.c
@@ -26,25 +26,23 @@ int main ()
 {
   *vecfloat++ = vec_andc((vector bool int)vecint[0], vecfloat[1]);
   *vecfloat++ = vec_andc(vecfloat[0], (vector bool int)vecint[1]);
-  *vecfloat++ = vec_vxor((vector bool int)vecint[0], vecfloat[1]);
-  *vecfloat++ = vec_vxor(vecfloat[0], (vector bool int)vecint[1]);
+  *vecfloat++ = vec_xor((vector bool int)vecint[0], vecfloat[1]);
+  *vecfloat++ = vec_xor(vecfloat[0], (vector bool int)vecint[1]);
   *varpixel++ = vec_packpx(vecuint[0], vecuint[1]);
-  *varpixel++ = vec_vpkpx(vecuint[0], vecuint[1]);
-  *vecshort++ = vec_vmulesb(vecchar[0], vecchar[1]);
-  *vecshort++ = vec_vmulosb(vecchar[0], vecchar[1]);
+  *vecshort++ = vec_mule(vecchar[0], vecchar[1]);
+  *vecshort++ = vec_mulo(vecchar[0], vecchar[1]);
   *vecint++ = vec_ld(var_int[0], intp[1]);
   *vecint++ = vec_lde(var_int[0], intp[1]);
   *vecint++ = vec_ldl(var_int[0], intp[1]);
-  *vecint++ = vec_lvewx(var_int[0], intp[1]);
   *vecint++ = vec_unpackh(vecshort[0]);
   *vecint++ = vec_unpackl(vecshort[0]);
   *vecushort++ = vec_andc((vector bool short)vecshort[0], vecushort[1]);
   *vecushort++ = vec_andc(vecushort[0], (vector bool short)vecshort[1]);
-  *vecushort++ = vec_vxor((vector bool short)vecshort[0], vecushort[1]);
-  *vecushort++ = vec_vxor(vecushort[0], (vector bool short)vecshort[1]);
+  *vecushort++ = vec_xor((vector bool short)vecshort[0], vecushort[1]);
+  *vecushort++ = vec_xor(vecushort[0], (vector bool short)vecshort[1]);
   *vecuint++ = vec_ld(var_int[0], uintp[1]);
   *vecuint++ = vec_lvx(var_int[0], uintp[1]);
-  *vecuint++ = vec_vmsumubm(vecuchar[0], vecuchar[1], vecuint[2]);
+  *vecuint++ = vec_msum(vecuchar[0], vecuchar[1], vecuint[2]);
   *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]);
 
   *vecubi++ = vec_unpackh(vecubsi[0]);
@@ -62,11 +60,10 @@ int main ()
 
 /* Expected results:
      vec_packpx                     vpkpx
-     vec_vmulosb                    vmulesb
+     vec_mulo                       vmulesb
      vec_ld                         lxv2x
      vec_lde                        lvewx
      vec_ldl                        lxvl
-     vec_lvewx                      lvewx
      vec_unpackh                    vupklsh
      vec_unpackh                    vupklpx
      vec_unpackh                    vupklsb
@@ -75,10 +72,10 @@ int main ()
      vec_unpackl                    vupkhsb
      vec_andc                       xxlnor (vnor AIX)
                                     xxland (vand AIX)
-     vec_vxor                       xxlxor
-     vec_vmsumubm                   vmsumubm
-     vec_vmulesb                    vmulosb
-     vec_vmulosb                    vmulesb
+     vec_xor                        xxlxor
+     vec_msum                       vmsumubm
+     vec_mule                       vmulosb
+     vec_mulo                       vmulesb
      vec_ld                         lvx
 */
 
@@ -89,7 +86,7 @@ int main ()
 /* { dg-final { scan-assembler-times {\mlxv} 0 { target { ! powerpc_vsx } } } } */
 /* { dg-final { scan-assembler-times {\mlvx\M} 0 { target powerpc_vsx } } } */
 /* { dg-final { scan-assembler-times {\mlxv} 42 { target powerpc_vsx } } } */
-/* { dg-final { scan-assembler-times "lvewx" 2 } } */
+/* { dg-final { scan-assembler-times "lvewx" 1 } } */
 /* { dg-final { scan-assembler-times "lvxl" 1 } } */
 /* { dg-final { scan-assembler-times "vupklsh" 2 } } */
 /* { dg-final { scan-assembler-times "vupkhsh" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
index 7a1e8e8bd30..46d743a899b 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
@@ -10,5 +10,5 @@ test_neg (float *p)
 {
   float source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_sp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
index c9b90927693..bfc892b116e 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
@@ -10,5 +10,5 @@ test_neg (double *p)
 {
   double source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_dp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
index e70eb2d46f8..8c55c1cfb5c 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
@@ -10,5 +10,5 @@ test_neg (__ieee128 *p)
 {
   __ieee128 source = *p;
 
-  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_qp' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
index 44c0397c49a..e023076bac7 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-p9-runnable.c
@@ -73,10 +73,10 @@ int main() {
          abort();
    }
    vfexpt = (vector float){1.0, -2.0, 0.0, 8.5};
-   vfr = vec_extract_fp_from_shorth(vusha);
+   vfr = vec_extract_fp32_from_shorth(vusha);
 
 #ifdef DEBUG
-   printf ("vec_extract_fp_from_shorth\n");
+   printf ("vec_extract_fp32_from_shorth\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);
@@ -88,10 +88,10 @@ int main() {
    }
 
    vfexpt = (vector float){1.5, 0.5, 1.25, -0.25};
-   vfr = vec_extract_fp_from_shortl(vusha);
+   vfr = vec_extract_fp32_from_shortl(vusha);
 
 #ifdef DEBUG
-   printf ("\nvec_extract_fp_from_shortl\n");
+   printf ("\nvec_extract_fp32_from_shortl\n");
    for (i=0; i<4; i++)
      printf("result[%d] = %f; expected[%d] = %f\n",
 	    i, vfr[i], i, vfexpt[i]);


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-08 23:09 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-08 23:09 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4b6d9a8f037aeb19064bb3befb297cb76d20a346

commit 4b6d9a8f037aeb19064bb3befb297cb76d20a346
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Fri Jan 8 17:08:42 2021 -0600

    rs6000: More bug fixes
    
    2021-01-08  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def (__builtin_altivec_vsr):
            Fix argument types.
            (__builtin_altivec_vsro): Likewise.
    
    gcc/testsuite/
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Fix expected error message.
            * gcc.target/powerpc/dfp/dtstsfi-16.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-51.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-56.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-71.c: Likewise.
            * gcc.target/powerpc/dfp/dtstsfi-76.c: Likewise.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def          | 4 ++--
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c | 2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 645d4b0425f..6fa121bb38d 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -933,7 +933,7 @@
   const vsi __builtin_altivec_vspltw (vsi, const int<2>);
     VSPLTW altivec_vspltw {}
 
-  const vop __builtin_altivec_vsr (vop, vuc);
+  const vop __builtin_altivec_vsr (vop, vop);
     VSR altivec_vsr {}
 
   const vsc __builtin_altivec_vsrab (vsc, vuc);
@@ -951,7 +951,7 @@
   const vss __builtin_altivec_vsrh (vss, vus);
     VSRH vlshrv8hi3 {}
 
-  const vop __builtin_altivec_vsro (vop, vuc);
+  const vop __builtin_altivec_vsro (vop, vop);
     VSRO altivec_vsro {}
 
   const vsi __builtin_altivec_vsrw (vsi, vui);
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index b5bea3cf1a0..6338a0e4278 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */ /* { dg-error "'__builtin_dtstsfi_lt_dd' requires" }  */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
index c6a42f089e0..d889bdd385c 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
index 5d9d5d61b42..0d47cc27897 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
index ca5e0098411..f070a0c4a7b 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
index 5e4f4964aaa..451a9e74c28 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
index 02ff47441e5..d0833c80f60 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_td' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
index 6c64021a479..1a54150617e 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_dd' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
index 982ed5d79df..74269fac328 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_td' requires" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-08 20:42 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-08 20:42 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:3f60eb2cde4607e4ebe05c0c1a67bdaa87c3a374

commit 3f60eb2cde4607e4ebe05c0c1a67bdaa87c3a374
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Fri Jan 8 14:42:22 2021 -0600

    rs6000: More bug fixes
    
    2021-01-08  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/emmintrin.h: Change deprecated built-in calls.
            * config/rs6000/rs6000-builtin-new.def
            (__builtin_altivec_vcmpgtud_p): Fix arguments.
            (__builtin_altivec_vcmpaeb_p et al.): Remove {pred}.
    
    gcc/testsuite/
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Add second expected error
            message.

Diff:
---
 gcc/config/rs6000/emmintrin.h                     | 30 +++++++++++------------
 gcc/config/rs6000/rs6000-builtin-new.def          | 26 ++++++++++----------
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c |  2 +-
 3 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/gcc/config/rs6000/emmintrin.h b/gcc/config/rs6000/emmintrin.h
index b957c1bf798..3ba0df593e7 100644
--- a/gcc/config/rs6000/emmintrin.h
+++ b/gcc/config/rs6000/emmintrin.h
@@ -892,8 +892,8 @@ _mm_cvtpd_epi32 (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4si) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4si) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -931,8 +931,8 @@ _mm_cvtpd_ps (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4sf) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4sf) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -964,8 +964,8 @@ _mm_cvttpd_epi32 (__m128d __A)
 #else
   temp = vec_mergee (temp, temp);
 #endif
-  result = (__v4si) vec_vpkudum ((__vector long long) temp,
-				 (__vector long long) vzero);
+  result = (__v4si) vec_pack ((__vector long long) temp,
+			      (__vector long long) vzero);
 #else
   {
     const __v16qu pkperm = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
@@ -1254,8 +1254,8 @@ _mm_movemask_pd (__m128d  __A)
     };
 
   result = ((__vector unsigned long long)
-	    vec_vbpermq ((__vector unsigned char) __A,
-			 (__vector unsigned char) perm_mask));
+	    vec_bperm ((__vector unsigned char) __A,
+		       (__vector unsigned char) perm_mask));
 
 #ifdef __LITTLE_ENDIAN__
   return result[1];
@@ -1434,7 +1434,7 @@ _mm_madd_epi16 (__m128i __A, __m128i __B)
 {
   __vector signed int zero = {0, 0, 0, 0};
 
-  return (__m128i) vec_vmsumshm ((__v8hi)__A, (__v8hi)__B, zero);
+  return (__m128i) vec_msum ((__v8hi)__A, (__v8hi)__B, zero);
 }
 
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -1452,8 +1452,8 @@ _mm_mulhi_epi16 (__m128i __A, __m128i __B)
 #endif
     };
 
-  w0 = vec_vmulesh ((__v8hi)__A, (__v8hi)__B);
-  w1 = vec_vmulosh ((__v8hi)__A, (__v8hi)__B);
+  w0 = vec_mule ((__v8hi)__A, (__v8hi)__B);
+  w1 = vec_mulo ((__v8hi)__A, (__v8hi)__B);
   return (__m128i) vec_perm (w0, w1, xform1);
 }
 
@@ -2046,8 +2046,8 @@ _mm_movemask_epi8 (__m128i __A)
     };
 
   result = ((__vector unsigned long long)
-	    vec_vbpermq ((__vector unsigned char) __A,
-			 (__vector unsigned char) perm_mask));
+	    vec_bperm ((__vector unsigned char) __A,
+		       (__vector unsigned char) perm_mask));
 
 #ifdef __LITTLE_ENDIAN__
   return result[1];
@@ -2071,8 +2071,8 @@ _mm_mulhi_epu16 (__m128i __A, __m128i __B)
 #endif
     };
 
-  w0 = vec_vmuleuh ((__v8hu)__A, (__v8hu)__B);
-  w1 = vec_vmulouh ((__v8hu)__A, (__v8hu)__B);
+  w0 = vec_mule ((__v8hu)__A, (__v8hu)__B);
+  w1 = vec_mulo ((__v8hu)__A, (__v8hu)__B);
   return (__m128i) vec_perm (w0, w1, xform1);
 }
 
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 2c1eabd4fde..645d4b0425f 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -2214,7 +2214,7 @@
   const vsll __builtin_altivec_vcmpgtud (vull, vull);
     VCMPGTUD vector_gtuv2di {}
 
-  const int __builtin_altivec_vcmpgtud_p (vull, vull);
+  const int __builtin_altivec_vcmpgtud_p (int, vull, vull);
     VCMPGTUD_P vector_gtu_v2di_p {pred}
 
   const vsll __builtin_altivec_vmaxsd (vsll, vsll);
@@ -2582,49 +2582,49 @@
     VCTZLSBB_V8HI vctzlsbb_v8hi {}
 
   const signed int __builtin_altivec_vcmpaeb_p (vsc, vsc);
-    VCMPAEB_P vector_ae_v16qi_p {pred}
+    VCMPAEB_P vector_ae_v16qi_p {}
 
   const signed int __builtin_altivec_vcmpaed_p (vsll, vsll);
-    VCMPAED_P vector_ae_v2di_p {pred}
+    VCMPAED_P vector_ae_v2di_p {}
 
   const signed int __builtin_altivec_vcmpaedp_p (vd, vd);
-    VCMPAEDP_P vector_ae_v2df_p {pred}
+    VCMPAEDP_P vector_ae_v2df_p {}
 
   const signed int __builtin_altivec_vcmpaefp_p (vf, vf);
-    VCMPAEFP_P vector_ae_v4sf_p {pred}
+    VCMPAEFP_P vector_ae_v4sf_p {}
 
   const signed int __builtin_altivec_vcmpaeh_p (vss, vss);
-    VCMPAEH_P vector_ae_v8hi_p {pred}
+    VCMPAEH_P vector_ae_v8hi_p {}
 
   const signed int __builtin_altivec_vcmpaew_p (vsi, vsi);
-    VCMPAEW_P vector_ae_v4si_p {pred}
+    VCMPAEW_P vector_ae_v4si_p {}
 
   const vsc __builtin_altivec_vcmpneb (vsc, vsc);
     VCMPNEB vcmpneb {}
 
   const signed int __builtin_altivec_vcmpneb_p (vsc, vsc);
-    VCMPNEB_P vector_ne_v16qi_p {pred}
+    VCMPNEB_P vector_ne_v16qi_p {}
 
   const signed int __builtin_altivec_vcmpned_p (vsll, vsll);
-    VCMPNED_P vector_ne_v2di_p {pred}
+    VCMPNED_P vector_ne_v2di_p {}
 
   const signed int __builtin_altivec_vcmpnedp_p (vd, vd);
-    VCMPNEDP_P vector_ne_v2df_p {pred}
+    VCMPNEDP_P vector_ne_v2df_p {}
 
   const signed int __builtin_altivec_vcmpnefp_p (vf, vf);
-    VCMPNEFP_P vector_ne_v4sf_p {pred}
+    VCMPNEFP_P vector_ne_v4sf_p {}
 
   const vss __builtin_altivec_vcmpneh (vss, vss);
     VCMPNEH vcmpneh {}
 
   const signed int __builtin_altivec_vcmpneh_p (vss, vss);
-    VCMPNEH_P vector_ne_v8hi_p {pred}
+    VCMPNEH_P vector_ne_v8hi_p {}
 
   const vsi __builtin_altivec_vcmpnew (vsi, vsi);
     VCMPNEW vcmpnew {}
 
   const signed int __builtin_altivec_vcmpnew_p (vsi, vsi);
-    VCMPNEW_P vector_ne_v4si_p {pred}
+    VCMPNEW_P vector_ne_v4si_p {}
 
   const vsc __builtin_altivec_vcmpnezb (vsc, vsc);
     CMPNEZB vcmpnezb {}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index c56a24e0db4..b5bea3cf1a0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */ /* { dg-error "'__builtin_dtstsfi_lt_dd' requires" }  */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-07 18:23 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-07 18:23 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:0732844addff2822e74d2fd862d72781b96f44bd

commit 0732844addff2822e74d2fd862d72781b96f44bd
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Thu Jan 7 12:17:54 2021 -0600

    rs6000: More bug fixes
    
    2021-01-07  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-builtin-new.def
            * config/rs6000-overload.def
    
    gcc/testsuite/
            * gcc.target/powerpc/altivec-10.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Adjust.
            * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-10.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-11.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-12.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-13.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-14.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-15.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-16.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-17.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-18.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-19.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-30.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-31.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-32.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-33.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-34.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-35.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-36.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-37.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-38.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-39.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-50.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-51.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-52.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-53.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-54.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-55.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-56.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-57.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-58.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-59.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-70.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-71.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-72.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-73.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-74.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-75.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-76.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-77.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-78.c: Adjust.
            * gcc.target/powerpc/dfp/dtstsfi-79.c: Adjust.

Diff:
---
 gcc/config/rs6000/rs6000-builtin-new.def           | 26 ++++++++---------
 gcc/config/rs6000/rs6000-overload.def              | 34 +++++++++++-----------
 gcc/testsuite/gcc.target/powerpc/altivec-10.c      |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-2.c     |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-3.c     |  2 +-
 .../gcc.target/powerpc/bfp/scalar-test-neg-5.c     |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c  |  2 +-
 gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c  |  2 +-
 46 files changed, 74 insertions(+), 74 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 8b54b17e1ce..2c1eabd4fde 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -2734,10 +2734,10 @@
   const signed int __builtin_vsx_scalar_cmp_exp_dp_unordered (double, double);
     VSCEDPUO xscmpexpdp_unordered {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_dp (double, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_dp (double, const int<7>);
     VSTDCDP xststdcdp {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_sp (float, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_sp (float, const int<7>);
     VSTDCSP xststdcsp {}
 
   const unsigned int __builtin_vsx_scalar_test_neg_dp (double);
@@ -2746,10 +2746,10 @@
   const unsigned int __builtin_vsx_scalar_test_neg_sp (float);
     VSTDCNSP xststdcnegsp {}
 
-  const vbll __builtin_vsx_test_data_class_dp (vd, signed int);
+  const vbll __builtin_vsx_test_data_class_dp (vd, const int<7>);
     VTDCDP xvtstdcdp {}
 
-  const vbi __builtin_vsx_test_data_class_sp (vf, signed int);
+  const vbi __builtin_vsx_test_data_class_sp (vf, const int<7>);
     VTDCSP xvtstdcsp {}
 
   const vf __builtin_vsx_vextract_fp_from_shorth (vus);
@@ -2794,28 +2794,28 @@
   double __builtin_mffsl ();
     MFFSL rs6000_mffsl {}
 
-  const signed int __builtin_dtstsfi_eq_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_eq_dd (const int<6>, _Decimal64);
     TSTSFI_EQ_DD dfptstsfi_eq_dd {}
 
-  const signed int __builtin_dtstsfi_eq_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_eq_td (const int<6>, _Decimal128);
     TSTSFI_EQ_TD dfptstsfi_eq_td {}
 
-  const signed int __builtin_dtstsfi_gt_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_gt_dd (const int<6>, _Decimal64);
     TSTSFI_GT_DD dfptstsfi_gt_dd {}
 
-  const signed int __builtin_dtstsfi_gt_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_gt_td (const int<6>, _Decimal128);
     TSTSFI_GT_TD dfptstsfi_gt_td {}
 
-  const signed int __builtin_dtstsfi_lt_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_lt_dd (const int<6>, _Decimal64);
     TSTSFI_LT_DD dfptstsfi_lt_dd {}
 
-  const signed int __builtin_dtstsfi_lt_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_lt_td (const int<6>, _Decimal128);
     TSTSFI_LT_TD dfptstsfi_lt_td {}
 
-  const signed int __builtin_dtstsfi_ov_dd (unsigned int, _Decimal64);
+  const signed int __builtin_dtstsfi_ov_dd (const int<6>, _Decimal64);
     TSTSFI_OV_DD dfptstsfi_unordered_dd {}
 
-  const signed int __builtin_dtstsfi_ov_td (unsigned int, _Decimal128);
+  const signed int __builtin_dtstsfi_ov_td (const int<6>, _Decimal128);
     TSTSFI_OV_TD dfptstsfi_unordered_td {}
 
 
@@ -2905,7 +2905,7 @@
   const _Float128 __builtin_vsx_scalar_insert_exp_qp (_Float128, unsigned long long);
     VSIEQPF xsiexpqpf_kf {}
 
-  const unsigned int __builtin_vsx_scalar_test_data_class_qp (_Float128, signed int);
+  const unsigned int __builtin_vsx_scalar_test_data_class_qp (_Float128, const int<7>);
     VSTDCQP xststdcqp_kf {}
 
   const unsigned int __builtin_vsx_scalar_test_neg_qp (_Float128);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 60a18a79416..45e95ea3063 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -3548,27 +3548,27 @@
     XVRDPIZ
 
 [VEC_TSTSFI_GT, SKIP, __builtin_dfp_dtstsfi_gt]
-  signed int __builtin_dfp_dtstsfi_gt (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_gt (const int, _Decimal64);
     TSTSFI_GT_DD
-  signed int __builtin_dfp_dtstsfi_gt (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_gt (const int, _Decimal128);
     TSTSFI_GT_TD
 
 [VEC_TSTSFI_EQ, SKIP, __builtin_dfp_dtstsfi_eq]
-  signed int __builtin_dfp_dtstsfi_eq (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_eq (const int, _Decimal64);
     TSTSFI_EQ_DD
-  signed int __builtin_dfp_dtstsfi_eq (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_eq (const int, _Decimal128);
     TSTSFI_EQ_TD
 
 [VEC_TSTSFI_LT, SKIP, __builtin_dfp_dtstsfi_lt]
-  signed int __builtin_dfp_dtstsfi_lt (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_lt (const int, _Decimal64);
     TSTSFI_LT_DD
-  signed int __builtin_dfp_dtstsfi_lt (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_lt (const int, _Decimal128);
     TSTSFI_LT_TD
 
 [VEC_TSTSFI_OV, SKIP, __builtin_dfp_dtstsfi_ov]
-  signed int __builtin_dfp_dtstsfi_ov (unsigned int, _Decimal64);
+  signed int __builtin_dfp_dtstsfi_ov (const int, _Decimal64);
     TSTSFI_OV_DD
-  signed int __builtin_dfp_dtstsfi_ov (unsigned int, _Decimal128);
+  signed int __builtin_dfp_dtstsfi_ov (const int, _Decimal128);
     TSTSFI_OV_TD
 
 [VEC_UNPACKH, vec_unpackh, __builtin_vec_unpackh]
@@ -3637,7 +3637,7 @@
   vull __builtin_vec_extract_sig (vd);
     VESDP
 
-[VEC_VIE, vec_insert_exp, __builtin_vec_insert_exp, ARCH_PWR9]
+[VEC_VIE, vec_insert_exp, __builtin_vec_insert_exp, _ARCH_PWR9]
   vf __builtin_vec_insert_exp (vf, vui);
     VIESP  VIESP_VF
   vf __builtin_vec_insert_exp (vui, vui);
@@ -3694,25 +3694,25 @@
     VSIEQPF
 
 [VEC_VSTDC, scalar_test_data_class, __builtin_vec_scalar_test_data_class, _ARCH_PWR9]
-  bool __builtin_vec_scalar_test_data_class (float, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (float, const int);
     VSTDCSP
-  bool __builtin_vec_scalar_test_data_class (double, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (double, const int);
     VSTDCDP
-  bool __builtin_vec_scalar_test_data_class (_Float128, signed int);
+  unsigned int __builtin_vec_scalar_test_data_class (_Float128, const int);
     VSTDCQP
 
 [VEC_VSTDCN, scalar_test_neg, __builtin_vec_scalar_test_neg, _ARCH_PWR9]
-  bool __builtin_vec_scalar_test_neg (float);
+  unsigned int __builtin_vec_scalar_test_neg (float);
     VSTDCNSP
-  bool __builtin_vec_scalar_test_neg (double);
+  unsigned int __builtin_vec_scalar_test_neg (double);
     VSTDCNDP
-  bool __builtin_vec_scalar_test_neg (_Float128);
+  unsigned int __builtin_vec_scalar_test_neg (_Float128);
     VSTDCNQP
 
 [VEC_VTDC, vec_test_data_class, __builtin_vec_test_data_class, _ARCH_PWR9]
-  vbi __builtin_vec_test_data_class (vf, signed int);
+  vbi __builtin_vec_test_data_class (vf, const int);
     VTDCSP
-  vbll __builtin_vec_test_data_class (vd, signed int);
+  vbll __builtin_vec_test_data_class (vd, const int);
     VTDCDP
 
 [VEC_XL, vec_xl, __builtin_vec_vsx_ld, __VSX__]
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-10.c b/gcc/testsuite/gcc.target/powerpc/altivec-10.c
index f532eebbfab..e12b88a165b 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-10.c
@@ -61,7 +61,7 @@ check_cmple()
   vector float a = {1.0, 2.0, 3.0, 4.0};
   vector float b = {1.0, 3.0, 2.0, 5.0};
   vector bool int aux;
-  vector signed int le = {-1, -1, 0, -1};
+  vector bool int le = (vector bool int){-1, -1, 0, -1};
 
   aux = vec_cmple (a, b);
 
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
index 7d2b4deefc3..7a1e8e8bd30 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
@@ -10,5 +10,5 @@ test_neg (float *p)
 {
   float source = *p;
 
-  return __builtin_vec_scalar_test_neg_sp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_sp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
index b503dfa8b56..c9b90927693 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
@@ -10,5 +10,5 @@ test_neg (double *p)
 {
   double source = *p;
 
-  return __builtin_vec_scalar_test_neg_dp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_dp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
index bab86040a7b..e70eb2d46f8 100644
--- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
+++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
@@ -10,5 +10,5 @@ test_neg (__ieee128 *p)
 {
   __ieee128 source = *p;
 
-  return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error "'__builtin_vsx_scalar_test_neg_qp' requires" } */
+  return __builtin_vec_scalar_test_neg (source); /* { dg-error "'__builtin_vsx_scalar_test_neg' requires" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
index 822030bf737..4f7562b9c38 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (5, source);
+  return __builtin_dfp_dtstsfi_lt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
index 044e7683cf1..c56a24e0db4 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_dd' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
index 350b4c10205..4b72fa8edc3 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
index cc54c6b265e..af07fbb4a01 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_lt_dd (63, source))
+  if (__builtin_dfp_dtstsfi_lt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
index 011d20039d0..6397aae3e56 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
index 54d2557fa2f..6f57baf0150 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (5, source);
+  return __builtin_dfp_dtstsfi_lt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
index 8626c579a25..c6a42f089e0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (5, source);	/* { dg-error "'__builtin_dtstsfi_lt_td' requires" } */
+  return __builtin_dfp_dtstsfi_lt (5, source);	/* { dg-error "'__builtin_dtstsfi_lt' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
index 28033dbac18..ea934ea4652 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
index 8ce9390feaf..28bc10c3145 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_lt_td (63, source))
+  if (__builtin_dfp_dtstsfi_lt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
index 092b9c0f7c5..b2073f56b05 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_lt_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_lt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
index 6d8869e5435..ee098bcb999 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (5, source);
+  return __builtin_dfp_dtstsfi_gt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
index 439fcb2a548..5d9d5d61b42 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_dd' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
index d24f3982ee9..15d7a352fdf 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
index 6d978a09750..236f39393e0 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_gt_dd (63, source))
+  if (__builtin_dfp_dtstsfi_gt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
index b6620c51f2a..f6ed00a73dd 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
index fdafaf9ceb8..1390c8381f8 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (5, source);
+  return __builtin_dfp_dtstsfi_gt (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
index 822f6d57003..ca5e0098411 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (5, source);	/* { dg-error "'__builtin_dtstsfi_gt_td' requires" } */
+  return __builtin_dfp_dtstsfi_gt (5, source);	/* { dg-error "'__builtin_dtstsfi_gt' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
index dc4c8ecdd00..8e3954d6b93 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
index fce744cd916..a2b922955f6 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_gt_td (63, source))
+  if (__builtin_dfp_dtstsfi_gt (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
index 1aee9efe919..f6c0ede46cc 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_gt_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_gt (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
index 25b35ed4bc9..4663fc653bb 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (5, source);
+  return __builtin_dfp_dtstsfi_eq (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
index e6b5fe5469e..5e4f4964aaa 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_dd' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
index c9431b5ea1a..fc6b3568d09 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
index d11f497b137..9c194374187 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_eq_dd (63, source))
+  if (__builtin_dfp_dtstsfi_eq (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
index 2fdb58f6748..b896865e6bb 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
index 912ae7f3492..5c6fcc4ec83 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (5, source);
+  return __builtin_dfp_dtstsfi_eq (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
index 218d2f64d3e..02ff47441e5 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (5, source);	/* { dg-error "'__builtin_dtstsfi_eq_td' requires" } */
+  return __builtin_dfp_dtstsfi_eq (5, source);	/* { dg-error "'__builtin_dtstsfi_eq' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
index 275bf8d0ac2..edfac68b0e8 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
index 0626d87d9be..9a94371da35 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_eq_td (63, source))
+  if (__builtin_dfp_dtstsfi_eq (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
index e1da3d810ef..e7b50dc108e 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_eq_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_eq (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
index 875354c9ab8..c584d988b4b 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (5, source);
+  return __builtin_dfp_dtstsfi_ov (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfi" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
index 68758cf535a..6c64021a479 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_dd' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
index 725cc5432b9..44aaab201f9 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
index f368c38204b..e7d2a27ecfd 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal64 *p)
 {
   _Decimal64 source = *p;
 
-  if (__builtin_dfp_dtstsfi_ov_dd (63, source))
+  if (__builtin_dfp_dtstsfi_ov (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
index c6ffd51d9f4..fb3331162c7 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
@@ -8,6 +8,6 @@ int doTestBCDSignificance (_Decimal64 *p, unsigned int significance)
 {
   _Decimal64 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_dd (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
index 910fb7d98c8..7c75265de08 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
@@ -9,7 +9,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (5, source);
+  return __builtin_dfp_dtstsfi_ov (5, source);
 }
 
 /* { dg-final { scan-assembler	   "dtstsfiq" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
index d867a987df8..982ed5d79df 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (5, source);	/* { dg-error "'__builtin_dtstsfi_ov_td' requires" } */
+  return __builtin_dfp_dtstsfi_ov (5, source);	/* { dg-error "'__builtin_dtstsfi_ov' requires" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
index d279bfb5751..59471cfb645 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (65, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }
 
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
index 3034300f72b..1bda795b55a 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
@@ -8,7 +8,7 @@ int doTestBCDSignificance (_Decimal128 *p)
 {
   _Decimal128 source = *p;
 
-  if (__builtin_dfp_dtstsfi_ov_td (63, source))
+  if (__builtin_dfp_dtstsfi_ov (63, source))
     return 3;
   else
     return 5;
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
index b88b5a86bcb..c9e1721b3d6 100644
--- a/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
+++ b/gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
@@ -8,5 +8,5 @@ int doTestBCDSignificance (_Decimal128 *p, unsigned int significance)
 {
   _Decimal128 source = *p;
 
-  return __builtin_dfp_dtstsfi_ov_td (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
+  return __builtin_dfp_dtstsfi_ov (significance, source);	/* { dg-error "argument 1 must be a 6-bit unsigned literal" } */
 }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes
@ 2021-01-06 21:07 William Schmidt
  0 siblings, 0 replies; 29+ messages in thread
From: William Schmidt @ 2021-01-06 21:07 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4e6f54a98669614e30c8989e9dcf0529b9f92bf4

commit 4e6f54a98669614e30c8989e9dcf0529b9f92bf4
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date:   Wed Jan 6 15:06:45 2021 -0600

    rs6000: More bug fixes
    
    2021-01-06  Bill Schmidt  <wschmidt@linux.ibm.com>
    
    gcc/
            * config/rs6000/rs6000-c.c
            (altivec_resolve_new_overloaded_builtin): Fix arg access thinko.
            * config/rs6000/rs6000-overload-def (VEC_OR): Add missing forms.
            (VEC_VSCEUO): Fix typo.
    
    gcc/testsuite/
            * gcc.dg/vmx/ops.c: Remove bad srl and vec_v* forms.

Diff:
---
 gcc/config/rs6000/rs6000-c.c          |   2 +-
 gcc/config/rs6000/rs6000-overload.def |  52 +++++++++++++--
 gcc/testsuite/gcc.dg/vmx/ops.c        | 120 ----------------------------------
 3 files changed, 47 insertions(+), 127 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index c5402cc2d8e..1de614ba2b3 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -2884,7 +2884,7 @@ altivec_resolve_new_overloaded_builtin (location_t loc, tree fndecl,
 	gcc_assert (instance != NULL);
 	tree fntype = rs6000_builtin_info_x[instance->bifid].fntype;
 	tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
-	tree parmtype1 = TREE_VALUE (TREE_CHAIN (parmtype0));
+	tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
 
 	if (rs6000_new_builtin_type_compatible (types[0], parmtype0)
 	    && rs6000_new_builtin_type_compatible (types[1], parmtype1))
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 0876b8068bc..60a18a79416 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -2175,32 +2175,72 @@
 [VEC_OR, vec_or, __builtin_vec_or]
   vsc __builtin_vec_or (vsc, vsc);
     VOR_V16QI
+  vsc __builtin_vec_or (vsc, vbc);
+    VOR_V16QI  VOR_VSC_VBC
+  vsc __builtin_vec_or (vbc, vsc);
+    VOR_V16QI  VOR_VBC_VSC
   vuc __builtin_vec_or (vuc, vuc);
     VOR_V16QI_UNS  VOR_V16QI_U
   vbc __builtin_vec_or (vbc, vbc);
     VOR_V16QI_UNS  VOR_V16QI_B
+  vuc __builtin_vec_or (vuc, vbc);
+    VOR_V16QI_UNS  VOR_V16QI_UB
+  vuc __builtin_vec_or (vbc, vuc);
+    VOR_V16QI_UNS  VOR_V16QI_BU
   vss __builtin_vec_or (vss, vss);
     VOR_V8HI
+  vss __builtin_vec_or (vss, vbs);
+    VOR_V8HI  VOR_VSS_VBS
+  vss __builtin_vec_or (vbs, vss);
+    VOR_V8HI  VOR_VBS_VSS
   vus __builtin_vec_or (vus, vus);
     VOR_V8HI_UNS  VOR_V8HI_U
   vbs __builtin_vec_or (vbs, vbs);
     VOR_V8HI_UNS  VOR_V8HI_B
+  vus __builtin_vec_or (vus, vbs);
+    VOR_V8HI_UNS  VOR_V8HI_UB
+  vus __builtin_vec_or (vbs, vus);
+    VOR_V8HI_UNS  VOR_V8HI_BU
   vsi __builtin_vec_or (vsi, vsi);
     VOR_V4SI
+  vsi __builtin_vec_or (vsi, vbi);
+    VOR_V4SI  VOR_VSI_VBI
+  vsi __builtin_vec_or (vbi, vsi);
+    VOR_V4SI  VOR_VBI_VSI
   vui __builtin_vec_or (vui, vui);
     VOR_V4SI_UNS  VOR_V4SI_U
   vbi __builtin_vec_or (vbi, vbi);
     VOR_V4SI_UNS  VOR_V4SI_B
+  vui __builtin_vec_or (vui, vbi);
+    VOR_V4SI_UNS  VOR_V4SI_UB
+  vui __builtin_vec_or (vui, vbi);
+    VOR_V4SI_UNS  VOR_V4SI_BU
   vsll __builtin_vec_or (vsll, vsll);
     VOR_V2DI
+  vsll __builtin_vec_or (vsll, vbll);
+    VOR_V2DI  VOR_VSLL_VBLL
+  vsll __builtin_vec_or (vbll, vsll);
+    VOR_V2DI  VOR_VBLL_VSLL
   vull __builtin_vec_or (vull, vull);
     VOR_V2DI_UNS  VOR_V2DI_U
   vbll __builtin_vec_or (vbll, vbll);
     VOR_V2DI_UNS  VOR_V2DI_B
+  vull __builtin_vec_or (vull, vbll);
+    VOR_V2DI_UNS  VOR_V2DI_UB
+  vull __builtin_vec_or (vbll, vull);
+    VOR_V2DI_UNS  VOR_V2DI_BU
   vf __builtin_vec_or (vf, vf);
     VOR_V4SF
+  vf __builtin_vec_or (vf, vbi);
+    VOR_V4SF  VOR_VF_VBI
+  vf __builtin_vec_or (vbi, vf);
+    VOR_V4SF  VOR_VBI_VF
   vd __builtin_vec_or (vd, vd);
     VOR_V2DF
+  vd __builtin_vec_or (vd, vbll);
+    VOR_V2DF  VOR_VD_VBLL
+  vd __builtin_vec_or (vbll, vd);
+    VOR_V2DF  VOR_VBLL_VD
 
 [VEC_ORC, vec_orc, __builtin_vec_orc, _ARCH_PWR8]
   vsc __builtin_vec_orc (vsc, vsc);
@@ -3625,7 +3665,7 @@
   signed int __builtin_vec_scalar_cmp_exp_lt (_Float128, _Float128);
     VSCEQPLT
 
-[VEC_VSCEUO, scalar_cmp_exp_unordered, __builtin_vec_scalar_cmp_exp_unordered, ARCH_PWR9]
+[VEC_VSCEUO, scalar_cmp_exp_unordered, __builtin_vec_scalar_cmp_exp_unordered, _ARCH_PWR9]
   signed int __builtin_vec_scalar_cmp_exp_unordered (double, double);
     VSCEDPUO
   signed int __builtin_vec_scalar_cmp_exp_unordered (_Float128, _Float128);
@@ -3638,17 +3678,17 @@
     VSEEQP
 
 [VEC_VSES, scalar_extract_sig, __builtin_vec_scalar_extract_sig, _ARCH_PWR9]
-  unsigned int __builtin_vec_scalar_extract_sig (double);
+  unsigned long long __builtin_vec_scalar_extract_sig (double);
     VSESDP
-  unsigned int __builtin_vec_scalar_extract_sig (_Float128);
+  unsigned __int128 __builtin_vec_scalar_extract_sig (_Float128);
     VSESQP
 
 [VEC_VSIE, scalar_insert_exp, __builtin_vec_scalar_insert_exp, _ARCH_PWR9]
-  double __builtin_vec_scalar_insert_exp (unsigned int, unsigned int);
+  double __builtin_vec_scalar_insert_exp (unsigned long long, unsigned long long);
     VSIEDP
-  double __builtin_vec_scalar_insert_exp (double, unsigned int);
+  double __builtin_vec_scalar_insert_exp (double, unsigned long long);
     VSIEDPF
-  _Float128 __builtin_vec_scalar_insert_exp (unsigned long long, unsigned long long);
+  _Float128 __builtin_vec_scalar_insert_exp (unsigned __int128, unsigned long long);
     VSIEQP
   _Float128 __builtin_vec_scalar_insert_exp (_Float128, unsigned long long);
     VSIEQPF
diff --git a/gcc/testsuite/gcc.dg/vmx/ops.c b/gcc/testsuite/gcc.dg/vmx/ops.c
index 5ba559e6f4b..7b56e9d8afa 100644
--- a/gcc/testsuite/gcc.dg/vmx/ops.c
+++ b/gcc/testsuite/gcc.dg/vmx/ops.c
@@ -192,42 +192,8 @@ void f2() {
   *var_vec_b16++ = vec_splat(var_vec_b16[0], 7);
 }
 void f3() {
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_srl(var_vec_b16[0], var_vec_u8[1]);
   *var_vec_b16++ = vec_unpackh(var_vec_b8[0]);
   *var_vec_b16++ = vec_unpackl(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vand(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vandc(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vcmpequh(var_vec_s16[0], var_vec_s16[1]);
-  *var_vec_b16++ = vec_vcmpequh(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vcmpgtsh(var_vec_s16[0], var_vec_s16[1]);
-  *var_vec_b16++ = vec_vcmpgtuh(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vmrghh(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vmrglh(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vnor(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vor(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b16++ = vec_vperm(var_vec_b16[0], var_vec_b16[1], var_vec_u8[2]);
-  *var_vec_b16++ = vec_vpkuwum(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b16++ = vec_vsel(var_vec_b16[0], var_vec_b16[1], var_vec_b16[2]);
-  *var_vec_b16++ = vec_vsel(var_vec_b16[0], var_vec_b16[1], var_vec_u16[2]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_vsl(var_vec_b16[0], var_vec_u8[1]);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 0);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 1);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 2);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 3);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 4);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 5);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 6);
-  *var_vec_b16++ = vec_vsplth(var_vec_b16[0], 7);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u16[1]);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u32[1]);
-  *var_vec_b16++ = vec_vsr(var_vec_b16[0], var_vec_u8[1]);
-  *var_vec_b16++ = vec_vupkhsb(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vupklsb(var_vec_b8[0]);
-  *var_vec_b16++ = vec_vxor(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b16++ = vec_xor(var_vec_b16[0], var_vec_b16[1]);
   *var_vec_b32++ = vec_and(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_andc(var_vec_b32[0], var_vec_b32[1]);
@@ -255,40 +221,8 @@ void f3() {
   *var_vec_b32++ = vec_splat(var_vec_b32[0], 3);
 }
 void f4() {
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_srl(var_vec_b32[0], var_vec_u8[1]);
   *var_vec_b32++ = vec_unpackh(var_vec_b16[0]);
   *var_vec_b32++ = vec_unpackl(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vand(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vandc(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vcmpeqfp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpequw(var_vec_s32[0], var_vec_s32[1]);
-  *var_vec_b32++ = vec_vcmpequw(var_vec_u32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vcmpgefp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpgtfp(var_vec_f32[0], var_vec_f32[1]);
-  *var_vec_b32++ = vec_vcmpgtsw(var_vec_s32[0], var_vec_s32[1]);
-  *var_vec_b32++ = vec_vcmpgtuw(var_vec_u32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vmrghw(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vmrglw(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vnor(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vor(var_vec_b32[0], var_vec_b32[1]);
-  *var_vec_b32++ = vec_vperm(var_vec_b32[0], var_vec_b32[1], var_vec_u8[2]);
-  *var_vec_b32++ = vec_vsel(var_vec_b32[0], var_vec_b32[1], var_vec_b32[2]);
-  *var_vec_b32++ = vec_vsel(var_vec_b32[0], var_vec_b32[1], var_vec_u32[2]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vsl(var_vec_b32[0], var_vec_u8[1]);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 0);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 1);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 2);
-  *var_vec_b32++ = vec_vspltw(var_vec_b32[0], 3);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u16[1]);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u32[1]);
-  *var_vec_b32++ = vec_vsr(var_vec_b32[0], var_vec_u8[1]);
-  *var_vec_b32++ = vec_vupkhsh(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vupklsh(var_vec_b16[0]);
-  *var_vec_b32++ = vec_vxor(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b32++ = vec_xor(var_vec_b32[0], var_vec_b32[1]);
   *var_vec_b8++ = vec_and(var_vec_b8[0], var_vec_b8[1]);
   *var_vec_b8++ = vec_andc(var_vec_b8[0], var_vec_b8[1]);
@@ -324,46 +258,6 @@ void f5() {
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 13);
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 14);
   *var_vec_b8++ = vec_splat(var_vec_b8[0], 15);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_srl(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vand(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vandc(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vcmpequb(var_vec_s8[0], var_vec_s8[1]);
-  *var_vec_b8++ = vec_vcmpequb(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vcmpgtsb(var_vec_s8[0], var_vec_s8[1]);
-  *var_vec_b8++ = vec_vcmpgtub(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vmrghb(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vmrglb(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vnor(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vor(var_vec_b8[0], var_vec_b8[1]);
-  *var_vec_b8++ = vec_vperm(var_vec_b8[0], var_vec_b8[1], var_vec_u8[2]);
-  *var_vec_b8++ = vec_vpkuhum(var_vec_b16[0], var_vec_b16[1]);
-  *var_vec_b8++ = vec_vsel(var_vec_b8[0], var_vec_b8[1], var_vec_b8[2]);
-  *var_vec_b8++ = vec_vsel(var_vec_b8[0], var_vec_b8[1], var_vec_u8[2]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_vsl(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 0);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 1);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 2);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 3);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 4);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 5);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 6);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 7);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 8);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 9);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 10);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 11);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 12);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 13);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 14);
-  *var_vec_b8++ = vec_vspltb(var_vec_b8[0], 15);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u16[1]);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u32[1]);
-  *var_vec_b8++ = vec_vsr(var_vec_b8[0], var_vec_u8[1]);
-  *var_vec_b8++ = vec_vxor(var_vec_b8[0], var_vec_b8[1]);
   *var_vec_b8++ = vec_xor(var_vec_b8[0], var_vec_b8[1]);
 }
 void f6() {
@@ -525,8 +419,6 @@ void f9() {
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 5);
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 6);
   *var_vec_p16++ = vec_splat(var_vec_p16[0], 7);
-  *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u16[1]);
-  *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u32[1]);
   *var_vec_p16++ = vec_srl(var_vec_p16[0], var_vec_u8[1]);
   *var_vec_p16++ = vec_sro(var_vec_p16[0], var_vec_s8[1]);
   *var_vec_p16++ = vec_sro(var_vec_p16[0], var_vec_u8[1]);
@@ -631,8 +523,6 @@ void f11() {
   *var_vec_s16++ = vec_splat_s16(-16);
   *var_vec_s16++ = vec_sr(var_vec_s16[0], var_vec_u16[1]);
   *var_vec_s16++ = vec_sra(var_vec_s16[0], var_vec_u16[1]);
-  *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u16[1]);
-  *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u32[1]);
   *var_vec_s16++ = vec_srl(var_vec_s16[0], var_vec_u8[1]);
   *var_vec_s16++ = vec_sro(var_vec_s16[0], var_vec_s8[1]);
   *var_vec_s16++ = vec_sro(var_vec_s16[0], var_vec_u8[1]);
@@ -771,8 +661,6 @@ void f14() {
 }
 void f15() {
   *var_vec_s32++ = vec_sra(var_vec_s32[0], var_vec_u32[1]);
-  *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u16[1]);
-  *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u32[1]);
   *var_vec_s32++ = vec_srl(var_vec_s32[0], var_vec_u8[1]);
   *var_vec_s32++ = vec_sro(var_vec_s32[0], var_vec_s8[1]);
   *var_vec_s32++ = vec_sro(var_vec_s32[0], var_vec_u8[1]);
@@ -891,8 +779,6 @@ void f18() {
   *var_vec_s8++ = vec_splat_s8(-16);
   *var_vec_s8++ = vec_sr(var_vec_s8[0], var_vec_u8[1]);
   *var_vec_s8++ = vec_sra(var_vec_s8[0], var_vec_u8[1]);
-  *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u16[1]);
-  *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u32[1]);
   *var_vec_s8++ = vec_srl(var_vec_s8[0], var_vec_u8[1]);
   *var_vec_s8++ = vec_sro(var_vec_s8[0], var_vec_s8[1]);
   *var_vec_s8++ = vec_sro(var_vec_s8[0], var_vec_u8[1]);
@@ -1002,8 +888,6 @@ void f21() {
   *var_vec_u16++ = vec_splat_u16(-16);
   *var_vec_u16++ = vec_sr(var_vec_u16[0], var_vec_u16[1]);
   *var_vec_u16++ = vec_sra(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u16[1]);
-  *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u32[1]);
   *var_vec_u16++ = vec_srl(var_vec_u16[0], var_vec_u8[1]);
   *var_vec_u16++ = vec_sro(var_vec_u16[0], var_vec_s8[1]);
   *var_vec_u16++ = vec_sro(var_vec_u16[0], var_vec_u8[1]);
@@ -1140,8 +1024,6 @@ void f23() {
   *var_vec_u32++ = vec_sra(var_vec_u32[0], var_vec_u32[1]);
 }
 void f24() {
-  *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u16[1]);
-  *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u32[1]);
   *var_vec_u32++ = vec_srl(var_vec_u32[0], var_vec_u8[1]);
   *var_vec_u32++ = vec_sro(var_vec_u32[0], var_vec_s8[1]);
   *var_vec_u32++ = vec_sro(var_vec_u32[0], var_vec_u8[1]);
@@ -1274,8 +1156,6 @@ void f27() {
   *var_vec_u8++ = vec_splat_u8(-16);
   *var_vec_u8++ = vec_sr(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_sra(var_vec_u8[0], var_vec_u8[1]);
-  *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u16[1]);
-  *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u32[1]);
   *var_vec_u8++ = vec_srl(var_vec_u8[0], var_vec_u8[1]);
   *var_vec_u8++ = vec_sro(var_vec_u8[0], var_vec_s8[1]);
   *var_vec_u8++ = vec_sro(var_vec_u8[0], var_vec_u8[1]);


^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2021-02-24  3:59 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-17 22:25 [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes William Schmidt
2021-01-06 21:07 William Schmidt
2021-01-07 18:23 William Schmidt
2021-01-08 20:42 William Schmidt
2021-01-08 23:09 William Schmidt
2021-01-13 14:58 William Schmidt
2021-01-13 21:47 William Schmidt
2021-01-14 23:07 William Schmidt
2021-01-27 16:07 William Schmidt
2021-01-27 23:01 William Schmidt
2021-01-28 23:21 William Schmidt
2021-02-01  0:34 William Schmidt
2021-02-07 17:48 William Schmidt
2021-02-07 18:16 William Schmidt
2021-02-07 18:17 William Schmidt
2021-02-07 18:17 William Schmidt
2021-02-07 18:17 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-07 18:18 William Schmidt
2021-02-22 20:27 William Schmidt
2021-02-22 20:27 William Schmidt
2021-02-24  3:59 William Schmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).