rs6000: Remove -m[no-]fold-gimple flag [PR103686]
The -m[no-]fold-gimple flag was really intended primarily for internal testing while implementing GIMPLE folding for rs6000 vector built-in functions. It ended up leaking into other places, causing problems such as PR103686 identifies. Let's remove it. There are a number of tests in the testsuite that require adjustment. Some specify -mfold-gimple directly, which is the default, so that is handled by removing the option. Others unnecessarily specify -mno-fold-gimple, as the tests work fine without this. Again that is handled by removing the option. There are a couple of extra variants of tests specifically for -mno-fold-gimple; for those, we can just remove the whole test. gcc.target/powerpc/builtins-1.c was more problematic. It was written in such a way as to be extremely fragile. For this one, I rewrote the whole test in a different style, using individual functions to test each built-in function. These same tests are also largely covered by builtins-1-be-folded.c and builtins-1-le-folded.c, so I chose to explicitly make this test -mbig for simplicity, and use -O2 for clean code generation. I made some slight modifications to the expected instruction counts as a result, and tested on both 32- and 64-bit. 2022-02-02 Bill Schmidt <wschmidt@linux.ibm.com> gcc/ PR target/103686 * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_builtin): Remove test for !rs6000_fold_gimple. * config/rs6000/rs6000.cc (rs6000_option_override_internal): Likewise. * config/rs6000/rs6000.opt (mfold-gimple): Remove. gcc/testsuite/ PR target/103686 * gcc.target/powerpc/builtins-1-be-folded.c: Remove -mfold-gimple option. * gcc.target/powerpc/builtins-1-le-folded.c: Likewise. * gcc.target/powerpc/builtins-1.c: Rewrite to use small functions and restrict to -O2 -mbig for predictability. Adjust instruction counts. * gcc.target/powerpc/builtins-5.c: Remove -mno-fold-gimple option. * gcc.target/powerpc/p8-vec-xl-xst.c: Likewise. * gcc.target/powerpc/pr83926.c: Likewise. * gcc.target/powerpc/pr86731-nogimplefold-longlong.c: Delete. * gcc.target/powerpc/pr86731-nogimplefold.c: Delete. * gcc.target/powerpc/swaps-p8-17.c: Remove -mno-fold-gimple option.
This commit is contained in:
parent
3f30f2d1db
commit
48bd780ee3
@ -1299,9 +1299,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)
|
||||
fprintf (stderr, "rs6000_gimple_fold_builtin %d %s %s\n",
|
||||
fn_code, fn_name1, fn_name2);
|
||||
|
||||
if (!rs6000_fold_gimple)
|
||||
return false;
|
||||
|
||||
/* Prevent gimple folding for code that does not have a LHS, unless it is
|
||||
allowed per the rs6000_builtin_valid_without_lhs helper function. */
|
||||
if (!gimple_call_lhs (stmt)
|
||||
|
@ -3833,10 +3833,6 @@ rs6000_option_override_internal (bool global_init_p)
|
||||
& OPTION_MASK_DIRECT_MOVE))
|
||||
rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN;
|
||||
|
||||
if (!rs6000_fold_gimple)
|
||||
fprintf (stderr,
|
||||
"gimple folding of rs6000 builtins has been disabled.\n");
|
||||
|
||||
/* Add some warnings for VSX. */
|
||||
if (TARGET_VSX)
|
||||
{
|
||||
|
@ -155,10 +155,6 @@ maltivec
|
||||
Target Mask(ALTIVEC) Var(rs6000_isa_flags)
|
||||
Use AltiVec instructions.
|
||||
|
||||
mfold-gimple
|
||||
Target Var(rs6000_fold_gimple) Init(1)
|
||||
Enable early gimple folding of builtins.
|
||||
|
||||
mhard-dfp
|
||||
Target Mask(DFP) Var(rs6000_isa_flags)
|
||||
Use decimal floating point instructions.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile { target { powerpc-*-* } } } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2 -mfold-gimple" } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */
|
||||
|
||||
/* Based on builtins-1-le.c ; ensure that the power8 builtins are accepted by
|
||||
the compiler, at O2 with gimple folding enabled. */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile { target { powerpc64le-*-* } } } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2 -mfold-gimple" } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */
|
||||
|
||||
/* Based on builtins-1-le.c ; ensure that the power8 builtins are accepted by
|
||||
the compiler, at O2 with gimple folding enabled. */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O0 -mno-fold-gimple -dp" } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O0 -dp" } */
|
||||
|
||||
#include <altivec.h>
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
/* { dg-do compile { target { le } } } */
|
||||
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
|
||||
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2 -mno-fold-gimple" } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */
|
||||
|
||||
/* Verify fix for problem where vec_xl and vec_xst are not recognized
|
||||
for the vector char and vector short cases on P8 only. */
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* { dg-do compile { target { powerpc*-*-* } } } */
|
||||
/* { dg-options "-O2 -mdejagnu-cpu=power8 -mno-fold-gimple" } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
/* { dg-options "-O2 -mdejagnu-cpu=power8" } */
|
||||
|
||||
__attribute__ ((altivec(vector__))) long long
|
||||
sdiv (__attribute__ ((altivec(vector__))) long long a,
|
||||
|
@ -1,32 +0,0 @@
|
||||
/* PR86731. Verify that the rs6000 gimple-folding code handles the
|
||||
left shift operation properly. This is a testcase variation that
|
||||
explicitly disables gimple folding. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
/* { dg-require-effective-target lp64 } */
|
||||
/* { dg-options "-maltivec -O3 -fwrapv -mno-fold-gimple -mpower8-vector " } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
|
||||
|
||||
#include <altivec.h>
|
||||
|
||||
vector unsigned long long splatu4(void)
|
||||
{
|
||||
vector unsigned long long mzero = {-1,-1};
|
||||
return (vector unsigned long long) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector signed long long splats4(void)
|
||||
{
|
||||
vector unsigned long long mzero = {-1,-1};
|
||||
return (vector signed long long) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
/* Codegen will consist of splat and shift instructions for most types.
|
||||
Noted variations: if gimple folding is disabled, or if -fwrapv is not specified, the
|
||||
long long tests will generate a vspltisw+vsld pair, versus generating a lvx. */
|
||||
/* { dg-final { scan-assembler-times {\mvspltis[bhw]\M|\mxxspltib\M} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\mvsl[bhwd]\M} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\mlvx\M} 0 } } */
|
||||
|
@ -1,63 +0,0 @@
|
||||
/* PR86731. Verify that the rs6000 gimple-folding code handles the
|
||||
left shift operation properly. This is a testcase variation that
|
||||
explicitly disables gimple folding. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target powerpc_altivec_ok } */
|
||||
/* { dg-require-effective-target lp64 } */
|
||||
/* { dg-options "-maltivec -O3 -fwrapv -mno-fold-gimple" } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
|
||||
|
||||
#include <altivec.h>
|
||||
/* original test as reported. */
|
||||
vector unsigned int splat(void)
|
||||
{
|
||||
vector unsigned int mzero = vec_splat_u32(-1);
|
||||
return (vector unsigned int) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
/* more testcase variations. */
|
||||
vector unsigned char splatu1(void)
|
||||
{
|
||||
vector unsigned char mzero = vec_splat_u8(-1);
|
||||
return (vector unsigned char) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector unsigned short splatu2(void)
|
||||
{
|
||||
vector unsigned short mzero = vec_splat_u16(-1);
|
||||
return (vector unsigned short) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector unsigned int splatu3(void)
|
||||
{
|
||||
vector unsigned int mzero = vec_splat_u32(-1);
|
||||
return (vector unsigned int) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector signed char splats1(void)
|
||||
{
|
||||
vector unsigned char mzero = vec_splat_u8(-1);
|
||||
return (vector signed char) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector signed short splats2(void)
|
||||
{
|
||||
vector unsigned short mzero = vec_splat_u16(-1);
|
||||
return (vector signed short) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
vector signed int splats3(void)
|
||||
{
|
||||
vector unsigned int mzero = vec_splat_u32(-1);
|
||||
return (vector signed int) vec_sl(mzero, mzero);
|
||||
}
|
||||
|
||||
/* Codegen will consist of splat and shift instructions for most types.
|
||||
Noted variations: if gimple folding is disabled, or if -fwrapv is not specified, the
|
||||
long long tests will generate a vspltisw+vsld pair, versus generating a lvx. */
|
||||
/* { dg-final { scan-assembler-times {\mvspltis[bhw]\M|\mxxspltib\M} 7 } } */
|
||||
/* { dg-final { scan-assembler-times {\mvsl[bhwd]\M} 7 } } */
|
||||
/* { dg-final { scan-assembler-times {\mlvx\M} 0 } } */
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* { dg-do compile { target { le } } } */
|
||||
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O1 -mno-fold-gimple" } */
|
||||
/* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
|
||||
/* { dg-options "-mdejagnu-cpu=power8 -O1" } */
|
||||
/* { dg-final { scan-assembler "lxvd2x" } } */
|
||||
/* { dg-final { scan-assembler "xxpermdi" } } */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user