On Apr 12, 2022, Segher Boessenkool <seg...@kernel.crashing.org> wrote:
> On Mon, Apr 11, 2022 at 08:59:41PM -0300, Alexandre Oliva wrote: >> >> gcc.target/powerpc/fold-vec-insert-double.c is compiled with -mvsx, >> while the expected asm output depends on target has_arch_pwr7, which >> is tested for without -mvsx. >> >> In some of our configurations, that have altivec and vsx disabled by >> default, the former defines up to _ARCH_PWR7, while the latter defines >> only up to _ARCH_PWR4, i.e., we compile for power7, and test for >> non-power7. > You cannot use -mvsx if you do not have -mcpu=power7 (or higher). If > -mvsx is allowed (i.e. when powerpc_vsx_ok is satisfied) you always are > compiling for power7 or higher. > What goes wrong? What goes wrong is that, because target has_arch_pwr7 runs the compiler without -mvsx, it gets only power4, so we test for the asm associated with target { ! has_arch_pwr7 }, which is not what's generated. Now, since -mvsx requires power7, it looks like the scan-assembler tests with target { ! has_arch_pwr7 } could be dropped, since they can (should) never run, and so could the target { has_arch_pwr7 } conditionals, since they can (should) be taken for granted. That makes for a much nicer patch. Tested on x86_64-linux-gnu cross to ppc64-vx7r2. Ok to install? ppc: testsuite: drop pwr7 conds in fold-vec-insert-double-insert-double gcc.target/powerpc/fold-vec-insert-double.c is compiled with -mvsx, which implies power7, but there are scan-assembler checks that depend on target has_arch_pwr7, negated or not, and that target conditional is tested for running the compiler without -mvsx. In some of our configurations, that have altivec and vsx disabled by default, the former defines up to _ARCH_PWR7, while the latter defines only up to _ARCH_PWR4, i.e., we compile for power7, and test for non-power7. Since -mvsx implies power7, the tests for target has_arch_pwr7 would be redundant if performed with -mvsx, so I'm dropping the checks guarded by ! has_arch_pwr7, and dropping has_arch_pwr7 from the others. for gcc/testsuite/ChangeLog * gcc.target/powerpc/fold-vec-insert-double.c: Constant-fold has_arch_pwr7, implied by -mvsx. --- .../gcc.target/powerpc/fold-vec-insert-double.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-insert-double.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-insert-double.c index afd7f7e9924e8..e99d5f40b2da9 100644 --- a/gcc/testsuite/gcc.target/powerpc/fold-vec-insert-double.c +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-insert-double.c @@ -24,15 +24,11 @@ testd_cst (double d, vector double vd) /* { dg-final { scan-assembler-times {\mrldic\M|\mrlwinm\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 1 { target { ! has_arch_pwr7 } } } } */ -/* { dg-final { scan-assembler-times {\mstfdx\M|\mstfd\M} 1 { target { ! has_arch_pwr7 } } } } */ -/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 1 { target { ! has_arch_pwr7 } } } } */ +/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 0 { target { lp64 } } } } */ +/* { dg-final { scan-assembler-times {\mstfdx\M|\mstfd\M} 0 { target { lp64 } } } } */ -/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 0 { target { has_arch_pwr7 && lp64 } } } } */ -/* { dg-final { scan-assembler-times {\mstfdx\M|\mstfd\M} 0 { target { has_arch_pwr7 && lp64 } } } } */ - -/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 0 { target { has_arch_pwr7 && lp64 } } } } */ -/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 0 { target { has_arch_pwr7 && ilp32 } } } } */ -/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 0 { target { has_arch_pwr7 && ilp32 } } } } */ -/* { dg-final { scan-assembler-times {\mstfdx\M|\mstfd\M} 0 { target { has_arch_pwr7 && ilp32 } } } } */ +/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 0 { target { lp64 } } } } */ +/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 0 { target { ilp32 } } } } */ +/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 0 { target { ilp32 } } } } */ +/* { dg-final { scan-assembler-times {\mstfdx\M|\mstfd\M} 0 { target { ilp32 } } } } */ -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer Disinformation flourishes because many people care deeply about injustice but very few check the facts. Ask me about <https://stallmansupport.org>