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>

Reply via email to