diff options
Diffstat (limited to 'gcc/testsuite/gcc.target')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr49095.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr79495.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr79514.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr79197.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr79268.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr79439.c | 29 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr79544.c | 21 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c | 68 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c | 23 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/sparc/20170228-1.c | 20 |
10 files changed, 200 insertions, 5 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr49095.c b/gcc/testsuite/gcc.target/i386/pr49095.c index 5fde08bb286..73758f8c523 100644 --- a/gcc/testsuite/gcc.target/i386/pr49095.c +++ b/gcc/testsuite/gcc.target/i386/pr49095.c @@ -1,7 +1,7 @@ /* PR rtl-optimization/49095 */ /* { dg-do compile } */ -/* { dg-options "-Os" } */ -/* { dg-options "-Os -mregparm=2" { target ia32 } } */ +/* { dg-options "-Os -fno-shrink-wrap" } */ +/* { dg-additional-options "-mregparm=2" { target ia32 } } */ void foo (void *); @@ -70,5 +70,4 @@ G (short) G (int) G (long) -/* See PR61225 for the XFAIL. */ -/* { dg-final { scan-assembler-not "test\[lq\]" { xfail { ia32 } } } } */ +/* { dg-final { scan-assembler-not "test\[lq\]" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr79495.c b/gcc/testsuite/gcc.target/i386/pr79495.c new file mode 100644 index 00000000000..27f48facbd2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr79495.c @@ -0,0 +1,11 @@ +/* PR target/79495 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -msoft-float" } */ + +long double dnan = 1.0l/0.0l - 1.0l/0.0l; +long double x = 1.0l; +void fn1 (void) +{ + if (dnan != x) + x = 1.0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr79514.c b/gcc/testsuite/gcc.target/i386/pr79514.c new file mode 100644 index 00000000000..c5b7bf8ef67 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr79514.c @@ -0,0 +1,12 @@ +/* PR target/79514 */ +/* { dg-do compile } */ +/* { dg-options "-m96bit-long-double" } */ + +extern void bar (long double); + +extern long double x; + +void foo (void) +{ + bar (x); +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr79197.c b/gcc/testsuite/gcc.target/powerpc/pr79197.c new file mode 100644 index 00000000000..659d76c15c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79197.c @@ -0,0 +1,11 @@ +/* PR target/79197 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mno-popcntd" } */ + +unsigned a; + +void +foo (void) +{ + a = *(double *) (__UINTPTR_TYPE__) 0x400000; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr79268.c b/gcc/testsuite/gcc.target/powerpc/pr79268.c index 4624736422c..8451356f46e 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr79268.c +++ b/gcc/testsuite/gcc.target/powerpc/pr79268.c @@ -1,5 +1,6 @@ -/* { dg-do compile { target { powerpc64le-*-* } } } */ +/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-*-aix* } } */ /* { dg-options "-mcpu=power8 -O3 " } */ /* Verify that vec_xl and vec_xst accept vector pixel parameters. */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79439.c b/gcc/testsuite/gcc.target/powerpc/pr79439.c new file mode 100644 index 00000000000..c9b99871a5e --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79439.c @@ -0,0 +1,29 @@ +/* { dg-do compile { target { powerpc64*-*-linux* && lp64 } } } */ +/* { dg-options "-O2 -fpic" } */ + +/* On the Linux 64-bit ABIs, we should not eliminate NOP in the 'rec' call if + -fpic is used because rec can be interposed at link time (since it is + external), and the recursive call should call the interposed function. The + Linux 32-bit ABIs do not require NOPs after the BL instruction. */ + +int f (void); + +void +g (void) +{ +} + +int +rec (int a) +{ + int ret = 0; + if (a > 10 && f ()) + ret += rec (a - 1); + g (); + return a + ret; +} + +/* { dg-final { scan-assembler-times {\mbl f\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl g\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mbl rec\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mnop\M} 4 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79544.c b/gcc/testsuite/gcc.target/powerpc/pr79544.c new file mode 100644 index 00000000000..1016fbdb482 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79544.c @@ -0,0 +1,21 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O2" } */ + +#include <altivec.h> + +vector unsigned long long +test_sra (vector unsigned long long x, vector unsigned long long y) +{ + return vec_sra (x, y); +} + +vector unsigned long long +test_vsrad (vector unsigned long long x, vector unsigned long long y) +{ + return vec_vsrad (x, y); +} + +/* { dg-final { scan-assembler-times {\mvsrad\M} 2 } } */ + diff --git a/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c b/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c new file mode 100644 index 00000000000..d56276a3dd9 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c @@ -0,0 +1,68 @@ +/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */ +/* { dg-options "-O2 -mvsx" } */ + +/* Added for PR79261 to test that vec_xxpermdi works correctly for + both BE and LE targets. */ + +#include <altivec.h> +void abort (void); + +vector double vdx = { 0.0, 1.0 }; +vector double vdy = { 2.0, 3.0 }; +vector double vdz; + +vector signed long long vsllx = { 0, 1 }; +vector signed long long vslly = { 2, 3 }; +vector signed long long vsllz; + +vector float vfx = { 0.0, 1.0, 2.0, 3.0 }; +vector float vfy = { 4.0, 5.0, 6.0, 7.0 }; +vector float vfz; + +vector signed int vsix = { 0, 1, 2, 3 }; +vector signed int vsiy = { 4, 5, 6, 7 }; +vector signed int vsiz; + +vector signed short vssx = { 0, 1, 2, 3, 4, 5, 6, 7 }; +vector signed short vssy = { 8, 9, 10, 11, 12, 13, 14, 15 }; +vector signed short vssz; + +vector signed char vscx = { 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15 }; +vector signed char vscy = { 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31 }; +vector signed char vscz; + +int +main () +{ + vdz = vec_xxpermdi (vdx, vdy, 0b01); + if (vdz[0] != 0.0 || vdz[1] != 3.0) + abort (); + + vsllz = vec_xxpermdi (vsllx, vslly, 0b10); + if (vsllz[0] != 1 || vsllz[1] != 2) + abort (); + + vfz = vec_xxpermdi (vfx, vfy, 0b01); + if (vfz[0] != 0.0 || vfz[1] != 1.0 || vfz[2] != 6.0 || vfz[3] != 7.0) + abort (); + + vsiz = vec_xxpermdi (vsix, vsiy, 0b10); + if (vsiz[0] != 2 || vsiz[1] != 3 || vsiz[2] != 4 || vsiz[3] != 5) + abort (); + + vssz = vec_xxpermdi (vssx, vssy, 0b00); + if (vssz[0] != 0 || vssz[1] != 1 || vssz[2] != 2 || vssz[3] != 3 + || vssz[4] != 8 || vssz[5] != 9 || vssz[6] != 10 || vssz[7] != 11) + abort (); + + vscz = vec_xxpermdi (vscx, vscy, 0b11); + if (vscz[0] != 8 || vscz[1] != 9 || vscz[2] != 10 || vscz[3] != 11 + || vscz[4] != 12 || vscz[5] != 13 || vscz[6] != 14 || vscz[7] != 15 + || vscz[8] != 24 || vscz[9] != 25 || vscz[10] != 26 || vscz[11] != 27 + || vscz[12] != 28 || vscz[13] != 29 || vscz[14] != 30 || vscz[15] != 31) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c index f337c1c745b..ff5296c87e2 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c @@ -35,6 +35,8 @@ /* { dg-final { scan-assembler "xvcmpgesp" } } */ /* { dg-final { scan-assembler "xxsldwi" } } */ /* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler "xvcvsxdsp" } } */ +/* { dg-final { scan-assembler "xvcvuxdsp" } } */ extern __vector int si[][4]; extern __vector short ss[][4]; @@ -50,7 +52,9 @@ extern __vector __pixel p[][4]; #ifdef __VSX__ extern __vector double d[][4]; extern __vector long sl[][4]; +extern __vector long long sll[][4]; extern __vector unsigned long ul[][4]; +extern __vector unsigned long long ull[][4]; extern __vector __bool long bl[][4]; #endif @@ -211,3 +215,22 @@ int do_xxsldwi (void) d[i][0] = __builtin_vsx_xxsldwi (d[i][1], d[i][2], 3); i++; return i; } + +int do_xvcvsxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvsxdsp (sll[i][1]); i++; + + return i; +} + +int do_xvcvuxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvuxdsp (ull[i][1]); i++; + + return i; +} + diff --git a/gcc/testsuite/gcc.target/sparc/20170228-1.c b/gcc/testsuite/gcc.target/sparc/20170228-1.c new file mode 100644 index 00000000000..575fbce528d --- /dev/null +++ b/gcc/testsuite/gcc.target/sparc/20170228-1.c @@ -0,0 +1,20 @@ +/* PR target/79749 */ +/* Reported by Rainer Orth <ro@gcc.gnu.org> */ + +/* { dg-do run } */ +/* { dg-options "-fomit-frame-pointer" } */ + +extern void abort (void); + +int foo (int x1, int x2, int x3, int x4, int x5, int x6, int x7) +{ + return x7; +} + +int main (void) +{ + if (foo (100, 200, 300, 400, 500, 600, 700) != 700) + abort (); + + return 0; +} |