Hi, Gentle ping this: https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590057.html
Thanks On 9/2/2022 上午 10:43, HAO CHEN GUI wrote: > Hi, > This patch removes TImode from mode iterator BOOL_128. Thus, bool > operations (AND, IOR, XOR, NOT) > on TImode will be split to the relevant operations on word mode during expand > (in optabs.c). Potential > optimizations can be implemented after the split. The former practice splits > it after the reload > pass which is too later for some optimizations. The new test case illustrates > it. > > Bootstrapped and tested on powerpc64-linux BE and LE with no regressions. > Is this okay for trunk? > Any recommendations? Thanks a lot. > > ChangeLog > 2022-02-08 Haochen Gui <guih...@linux.ibm.com> > > gcc/ > PR target/100694 > * config/rs6000/rs6000.md (BOOL_128): Remove TI. > > gcc/testsuite/ > PR target/100694 > * gcc.target/powerpc/pr100694.c: New. > * gcc.target/powerpc/pr92398.c: New. > * gcc.target/powerpc/pr92398.h: Remove. > * gcc.target/powerpc/pr92398.p9-.c: Remove. > * gcc.target/powerpc/pr92398.p9+.c: Remove. > > patch.diff > diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md > index 6f74075f58d..2bc1b8f497a 100644 > --- a/gcc/config/rs6000/rs6000.md > +++ b/gcc/config/rs6000/rs6000.md > @@ -750,8 +750,7 @@ (define_mode_attr SI_CONVERT_FP [(SF "TARGET_FCFIDS") > (DF "TARGET_FCFID")]) > > ;; Mode iterator for logical operations on 128-bit types > -(define_mode_iterator BOOL_128 [TI > - PTI > +(define_mode_iterator BOOL_128 [PTI > (V16QI "TARGET_ALTIVEC") > (V8HI "TARGET_ALTIVEC") > (V4SI "TARGET_ALTIVEC") > diff --git a/gcc/testsuite/gcc.target/powerpc/pr100694.c > b/gcc/testsuite/gcc.target/powerpc/pr100694.c > new file mode 100644 > index 00000000000..7b41d920140 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr100694.c > @@ -0,0 +1,15 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target int128 } */ > +/* { dg-options "-O2" } */ > +/* { dg-final { scan-assembler-times {\mstd\M} 2 } } */ > +/* { dg-final { scan-assembler-not {\mli\M} } } */ > +/* { dg-final { scan-assembler-not {\mor\M} } } */ > + > +/* It just needs two std. */ > +void foo (unsigned __int128* res, unsigned long long hi, unsigned long long > lo) > +{ > + unsigned __int128 i = hi; > + i <<= 64; > + i |= lo; > + *res = i; > +} > diff --git a/gcc/testsuite/gcc.target/powerpc/pr92398.c > b/gcc/testsuite/gcc.target/powerpc/pr92398.c > new file mode 100644 > index 00000000000..7d6201cc5bb > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr92398.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target int128 } */ > +/* { dg-options "-O2" } */ > +/* { dg-final { scan-assembler-times {\mnot\M} 2 } } */ > +/* { dg-final { scan-assembler-times {\mstd\M} 2 } } */ > + > +/* All platforms should generate the same instructions: not;not;std;std. */ > +void bar (__int128_t *dst, __int128_t src) > +{ > + *dst = ~src; > +} > + > diff --git a/gcc/testsuite/gcc.target/powerpc/pr92398.h > b/gcc/testsuite/gcc.target/powerpc/pr92398.h > deleted file mode 100644 > index 5a4a8bcab80..00000000000 > --- a/gcc/testsuite/gcc.target/powerpc/pr92398.h > +++ /dev/null > @@ -1,17 +0,0 @@ > -/* This test code is included into pr92398.p9-.c and pr92398.p9+.c. > - The two files have the tests for the number of instructions generated for > - P9- versus P9+. > - > - store generates difference instructions as below: > - P9+: mtvsrdd;xxlnot;stxv. > - P8/P7/P6 LE: not;not;std;std. > - P8 BE: mtvsrd;mtvsrd;xxpermdi;xxlnor;stxvd2x. > - P7/P6 BE: std;std;addi;lxvd2x;xxlnor;stxvd2x. > - P9+ and P9- LE are expected, P6/P7/P8 BE are unexpected. */ > - > -void > -bar (__int128_t *dst, __int128_t src) > -{ > - *dst = ~src; > -} > - > diff --git a/gcc/testsuite/gcc.target/powerpc/pr92398.p9+.c > b/gcc/testsuite/gcc.target/powerpc/pr92398.p9+.c > deleted file mode 100644 > index 72dd1d9a274..00000000000 > --- a/gcc/testsuite/gcc.target/powerpc/pr92398.p9+.c > +++ /dev/null > @@ -1,12 +0,0 @@ > -/* { dg-do compile { target { lp64 && has_arch_pwr9 } } } */ > -/* { dg-require-effective-target powerpc_vsx_ok } */ > -/* { dg-options "-O2 -mvsx" } */ > - > -/* { dg-final { scan-assembler-times {\mmtvsrdd\M} 1 } } */ > -/* { dg-final { scan-assembler-times {\mxxlnor\M} 1 } } */ > -/* { dg-final { scan-assembler-times {\mstxv\M} 1 } } */ > -/* { dg-final { scan-assembler-not {\mld\M} } } */ > -/* { dg-final { scan-assembler-not {\mnot\M} } } */ > - > -/* Source code for the test in pr92398.h */ > -#include "pr92398.h" > diff --git a/gcc/testsuite/gcc.target/powerpc/pr92398.p9-.c > b/gcc/testsuite/gcc.target/powerpc/pr92398.p9-.c > deleted file mode 100644 > index bd7fa98af51..00000000000 > --- a/gcc/testsuite/gcc.target/powerpc/pr92398.p9-.c > +++ /dev/null > @@ -1,10 +0,0 @@ > -/* { dg-do compile { target { lp64 && {! has_arch_pwr9} } } } */ > -/* { dg-require-effective-target powerpc_vsx_ok } */ > -/* { dg-options "-O2 -mvsx" } */ > - > -/* { dg-final { scan-assembler-times {\mnot\M} 2 { xfail be } } } */ > -/* { dg-final { scan-assembler-times {\mstd\M} 2 { xfail { { {! > has_arch_pwr9} && has_arch_pwr8 } && be } } } } */ > - > -/* Source code for the test in pr92398.h */ > -#include "pr92398.h" > -