With my changes for PR 59054, it broke several of the ISA 2.07 tests that I added due to DImode not being allowed in Altivec/VMX registers. This patch adjusts these tests to reflect the current code generation. In addition, it looks like I checked in the test for pr 59054 with the code duplicated.
These changes cause all of these tests to now pass. Are they ok to check in? 2013-11-21 Michael Meissner <meiss...@linux.vnet.ibm.com> PR target/59054 * gcc.target/powerpc/direct-move.h (VSX_REG_ATTR): Allow test to specify an appropriate register class for VSX operations. (load_vsx): Use it. (load_gpr_to_vsx): Likewise. (load_vsx_to_gpr): Likewise. * gcc.target/powerpc/direct-move-vint1.c: Use an appropriate register class for VSX registers that the type can handle. Remove checks for explicit number of instructions generated, just check if the instruction is generated. * gcc.target/powerpc/direct-move-vint2.c: Likewise. * gcc.target/powerpc/direct-move-float1.c: Likewise. * gcc.target/powerpc/direct-move-float2.c: Likewise. * gcc.target/powerpc/direct-move-double1.c: Likewise. * gcc.target/powerpc/direct-move-double2.c: Likewise. * gcc.target/powerpc/direct-move-long1.c: Likewise. * gcc.target/powerpc/direct-move-long2.c: Likewise. * gcc.target/powerpc/pr59054.c: Remove duplicate code. * gcc.target/powerpc/bool3-av.c: Limit to 64-bit mode for now. * gcc.target/powerpc/bool3-p7.c: Likewise. * gcc.target/powerpc/bool3-p8.c: Likewise. * gcc.target/powerpc/p8vector-ldst.c: Just check that the appropriate instructions are generated, don't check the count. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460, USA email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797
Index: gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c (working copy) @@ -3,11 +3,12 @@ /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-options "-mcpu=power8 -O2" } */ -/* { dg-final { scan-assembler-times "mtvsrd" 4 } } */ -/* { dg-final { scan-assembler-times "mfvsrd" 4 } } */ +/* { dg-final { scan-assembler "mtvsrd" } } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ -/* Check code generation for direct move for long types. */ +/* Check code generation for direct move for vector types. */ #define TYPE vector int +#define VSX_REG_ATTR "wa" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/pr59054.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/pr59054.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/pr59054.c (working copy) @@ -4,15 +4,3 @@ /* { dg-options "-mcpu=power7 -O0 -m64" } */ long foo (void) { return 0; } - -/* { dg-final { scan-assembler-not "xxlor" } } */ -/* { dg-final { scan-assembler-not "stfd" } } */ -/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -/* { dg-require-effective-target powerpc_vsx_ok } */ -/* { dg-options "-mcpu=power7 -O0 -m64" } */ - -long foo (void) { return 0; } - -/* { dg-final { scan-assembler-not "xxlor" } } */ -/* { dg-final { scan-assembler-not "stfd" } } */ Index: gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c (working copy) @@ -8,5 +8,6 @@ #define TYPE vector int #define DO_MAIN +#define VSX_REG_ATTR "wa" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/bool3-p7.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bool3-p7.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/bool3-p7.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-options "-O2 -mcpu=power7" } */ Index: gcc/testsuite/gcc.target/powerpc/direct-move.h =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move.h (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move.h (working copy) @@ -3,6 +3,10 @@ #include <math.h> extern void abort (void); +#ifndef VSX_REG_ATTR +#define VSX_REG_ATTR "wa" +#endif + void __attribute__((__noinline__)) copy (TYPE *a, TYPE *b) { @@ -44,7 +48,7 @@ void __attribute__((__noinline__)) load_vsx (TYPE *a, TYPE *b) { TYPE c = *a; - __asm__ ("# vsx, reg = %x0" : "+wa" (c)); + __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (c)); *b = c; } #endif @@ -57,7 +61,7 @@ load_gpr_to_vsx (TYPE *a, TYPE *b) TYPE d; __asm__ ("# gpr, reg = %0" : "+b" (c)); d = c; - __asm__ ("# vsx, reg = %x0" : "+wa" (d)); + __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (d)); *b = d; } #endif @@ -68,7 +72,7 @@ load_vsx_to_gpr (TYPE *a, TYPE *b) { TYPE c = *a; TYPE d; - __asm__ ("# vsx, reg = %x0" : "+wa" (c)); + __asm__ ("# vsx, reg = %x0" : "+" VSX_REG_ATTR (c)); d = c; __asm__ ("# gpr, reg = %0" : "+b" (d)); *b = d; Index: gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c (working copy) @@ -36,7 +36,7 @@ void store_df (double *p, double d) *p = d; } -/* { dg-final { scan-assembler-times "lxsspx" 2 } } */ -/* { dg-final { scan-assembler-times "lxsdx" 1 } } */ -/* { dg-final { scan-assembler-times "stxsspx" 1 } } */ -/* { dg-final { scan-assembler-times "stxsdx" 1 } } */ +/* { dg-final { scan-assembler "lxsspx" } } */ +/* { dg-final { scan-assembler "lxsdx" } } */ +/* { dg-final { scan-assembler "stxsspx" } } */ +/* { dg-final { scan-assembler "stxsdx" } } */ Index: gcc/testsuite/gcc.target/powerpc/bool3-p8.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bool3-p8.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/bool3-p8.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-options "-O2 -mcpu=power8" } */ Index: gcc/testsuite/gcc.target/powerpc/bool3-av.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bool3-av.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/bool3-av.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_altivec_ok } */ /* { dg-options "-O2 -mcpu=power6 -mabi=altivec -maltivec -mno-vsx" } */ Index: gcc/testsuite/gcc.target/powerpc/direct-move-float1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-float1.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-float1.c (working copy) @@ -3,15 +3,16 @@ /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-options "-mcpu=power8 -O2" } */ -/* { dg-final { scan-assembler-times "mtvsrd" 2 } } */ -/* { dg-final { scan-assembler-times "mfvsrd" 2 } } */ -/* { dg-final { scan-assembler-times "xscvdpspn" 2 } } */ -/* { dg-final { scan-assembler-times "xscvspdpn" 2 } } */ +/* { dg-final { scan-assembler "mtvsrd" } } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ +/* { dg-final { scan-assembler "xscvdpspn" } } */ +/* { dg-final { scan-assembler "xscvspdpn" } } */ -/* Check code generation for direct move for long types. */ +/* Check code generation for direct move for float types. */ #define TYPE float #define IS_FLOAT 1 #define NO_ALTIVEC 1 +#define VSX_REG_ATTR "ww" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/direct-move-float2.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-float2.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-float2.c (working copy) @@ -10,5 +10,6 @@ #define IS_FLOAT 1 #define NO_ALTIVEC 1 #define DO_MAIN +#define VSX_REG_ATTR "ww" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/direct-move-double1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-double1.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-double1.c (working copy) @@ -3,13 +3,14 @@ /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-options "-mcpu=power8 -O2" } */ -/* { dg-final { scan-assembler-times "mtvsrd" 1 } } */ -/* { dg-final { scan-assembler-times "mfvsrd" 1 } } */ +/* { dg-final { scan-assembler "mtvsrd" } } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ -/* Check code generation for direct move for long types. */ +/* Check code generation for direct move for double types. */ #define TYPE double #define IS_FLOAT 1 #define NO_ALTIVEC 1 +#define VSX_REG_ATTR "ws" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/direct-move-long1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-long1.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-long1.c (working copy) @@ -3,13 +3,14 @@ /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-options "-mcpu=power8 -O2" } */ -/* { dg-final { scan-assembler-times "mtvsrd" 1 } } */ -/* { dg-final { scan-assembler-times "mfvsrd" 2 } } */ +/* { dg-final { scan-assembler "mtvsrd" } } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ /* Check code generation for direct move for long types. */ #define TYPE long #define IS_INT 1 #define NO_ALTIVEC 1 +#define VSX_REG_ATTR "d" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/direct-move-double2.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-double2.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-double2.c (working copy) @@ -10,5 +10,6 @@ #define IS_FLOAT 1 #define NO_ALTIVEC 1 #define DO_MAIN +#define VSX_REG_ATTR "ws" #include "direct-move.h" Index: gcc/testsuite/gcc.target/powerpc/direct-move-long2.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/direct-move-long2.c (revision 205140) +++ gcc/testsuite/gcc.target/powerpc/direct-move-long2.c (working copy) @@ -10,5 +10,6 @@ #define IS_INT 1 #define NO_ALTIVEC 1 #define DO_MAIN +#define VSX_REG_ATTR "d" #include "direct-move.h"