From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1725) id B73AE386F833; Wed, 13 Jan 2021 21:47:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B73AE386F833 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: William Schmidt To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes X-Act-Checkin: gcc X-Git-Author: Bill Schmidt X-Git-Refname: refs/users/wschmidt/heads/builtins4 X-Git-Oldrev: c960c4d15be4a8bb91185c562eb97d23d08d34e2 X-Git-Newrev: 20bd4638aba09d1077f585a00e42d4cfb312fb38 Message-Id: <20210113214753.B73AE386F833@sourceware.org> Date: Wed, 13 Jan 2021 21:47:53 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jan 2021 21:47:53 -0000 https://gcc.gnu.org/g:20bd4638aba09d1077f585a00e42d4cfb312fb38 commit 20bd4638aba09d1077f585a00e42d4cfb312fb38 Author: Bill Schmidt Date: Wed Jan 13 15:47:32 2021 -0600 rs6000: More bug fixes 2021-01-13 Bill Schmidt 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" } } */