Hi, Gently ping this. https://gcc.gnu.org/pipermail/gcc-patches/2023-January/609369.html
Thanks Gui Haochen 在 2023/1/4 14:16, HAO CHEN GUI 写道: > Hi, > This patch changes the return type of __builtin_vsx_scalar_extract_exp > from const signed long to const signed int, as the exponent can be put in > a signed int. It is also inline with the external interface definition of > the bif. The mode of exponent operand in "xsxexpdp" is changed to GPR mode > and TARGET_64BIT check is removed, as the instruction can be executed on > a 32-bit environment. > > The test cases are modified according to the changes of expand pattern. > > Bootstrapped and tested on powerpc64-linux BE and LE with no regressions. > Is this okay for trunk? Any recommendations? Thanks a lot. > > Gui Haochen > > ChangeLog > 2022-12-23 Haochen Gui <guih...@linux.ibm.com> > > gcc/ > * config/rs6000/rs6000-builtins.def > (__builtin_vsx_scalar_extract_exp): Set return type to const unsigned > int and set its bif-pattern to xsxexpdp_si, move it from power9-64 to > power9 catalog. > * config/rs6000/vsx.md (xsxexpdp): Rename to ... > (xsxexpdp_<mode>): ..., set mode of operand 0 to GPR and remove > TARGET_64BIT check. > * doc/extend.texi (scalar_extract_exp): Remove 64-bit environment > requirement when it has a 64-bit argument. > > gcc/testsuite/ > * gcc.target/powerpc/bfp/scalar-extract-exp-0.c: Remove lp64 check. > * gcc.target/powerpc/bfp/scalar-extract-exp-1.c: Likewise. > * gcc.target/powerpc/bfp/scalar-extract-exp-2.c: Deleted as the case is > invalid. > * gcc.target/powerpc/bfp/scalar-extract-exp-6.c: Remove lp64 check. > > patch.diff > diff --git a/gcc/config/rs6000/rs6000-builtins.def > b/gcc/config/rs6000/rs6000-builtins.def > index f76f54793d7..a8f1d3f1b3d 100644 > --- a/gcc/config/rs6000/rs6000-builtins.def > +++ b/gcc/config/rs6000/rs6000-builtins.def > @@ -2833,6 +2833,8 @@ > const signed int __builtin_dtstsfi_ov_td (const int<6>, _Decimal128); > TSTSFI_OV_TD dfptstsfi_unordered_td {} > > + const signed int __builtin_vsx_scalar_extract_exp (double); > + VSEEDP xsxexpdp_si {} > > [power9-64] > void __builtin_altivec_xst_len_r (vsc, void *, long); > @@ -2847,9 +2849,6 @@ > pure vsc __builtin_vsx_lxvl (const void *, signed long); > LXVL lxvl {} > > - const signed long __builtin_vsx_scalar_extract_exp (double); > - VSEEDP xsxexpdp {} > - > const signed long __builtin_vsx_scalar_extract_sig (double); > VSESDP xsxsigdp {} > > diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md > index 992fbc983be..229c26c3a61 100644 > --- a/gcc/config/rs6000/vsx.md > +++ b/gcc/config/rs6000/vsx.md > @@ -5089,11 +5089,11 @@ (define_insn "xsxexpqp_<mode>" > [(set_attr "type" "vecmove")]) > > ;; VSX Scalar Extract Exponent Double-Precision > -(define_insn "xsxexpdp" > - [(set (match_operand:DI 0 "register_operand" "=r") > - (unspec:DI [(match_operand:DF 1 "vsx_register_operand" "wa")] > +(define_insn "xsxexpdp_<mode>" > + [(set (match_operand:GPR 0 "register_operand" "=r") > + (unspec:GPR [(match_operand:DF 1 "vsx_register_operand" "wa")] > UNSPEC_VSX_SXEXPDP))] > - "TARGET_P9_VECTOR && TARGET_64BIT" > + "TARGET_P9_VECTOR" > "xsxexpdp %0,%x1" > [(set_attr "type" "integer")]) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index d3812fa55b0..7c087967234 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -19598,7 +19598,10 @@ bool scalar_test_neg (double source); > bool scalar_test_neg (__ieee128 source); > @end smallexample > > -The @code{scalar_extract_exp} and @code{scalar_extract_sig} > +The @code{scalar_extract_exp} with a 64-bit source argument > +function requires an environment supporting ISA 3.0 or later. > +The @code{scalar_extract_exp} with a 128-bit source argument > +and @code{scalar_extract_sig} > functions require a 64-bit environment supporting ISA 3.0 or later. > The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in > functions return the significand and the biased exponent value > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c > index 35bf1b240f3..d971833748e 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c > @@ -1,9 +1,7 @@ > /* { dg-do compile { target { powerpc*-*-* } } } */ > -/* { dg-require-effective-target lp64 } */ > /* { dg-require-effective-target powerpc_p9vector_ok } */ > /* { dg-options "-mdejagnu-cpu=power9" } */ > > -/* This test should succeed only on 64-bit configurations. */ > #include <altivec.h> > > unsigned int > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c > index 9737762c1d4..1cb438f9b70 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c > @@ -1,9 +1,7 @@ > /* { dg-do compile { target { powerpc*-*-* } } } */ > -/* { dg-require-effective-target lp64 } */ > /* { dg-require-effective-target powerpc_p9vector_ok } */ > /* { dg-options "-mdejagnu-cpu=power8" } */ > > -/* This test should succeed only on 64-bit configurations. */ > #include <altivec.h> > > unsigned int > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c > deleted file mode 100644 > index 53b67c95cf9..00000000000 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c > +++ /dev/null > @@ -1,20 +0,0 @@ > -/* { dg-do compile { target { powerpc*-*-* } } } */ > -/* { dg-require-effective-target ilp32 } */ > -/* { dg-require-effective-target powerpc_p9vector_ok } */ > -/* { dg-options "-mdejagnu-cpu=power9" } */ > - > -/* This test only runs on 32-bit configurations, where a compiler error > - should be issued because this builtin is not available on > - 32-bit configurations. */ > - > -#include <altivec.h> > - > -unsigned int > -get_exponent (double *p) > -{ > - double source = *p; > - > - return scalar_extract_exp (source); /* { dg-error > "'__builtin_vsx_scalar_extract_exp' requires the" } */ > -} > - > - > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c > index b9dd7d61aae..e0581cd3dee 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c > @@ -1,9 +1,7 @@ > /* { dg-do run { target { powerpc*-*-* } } } */ > -/* { dg-require-effective-target lp64 } */ > /* { dg-require-effective-target p9vector_hw } */ > /* { dg-options "-mdejagnu-cpu=power9" } */ > > -/* This test should succeed only on 64-bit configurations. */ > #include <altivec.h> > #include <stdlib.h> >