Handle Octeon 3 not supporting MIPS paired-single instructions.
The Octeon 3 processor does not support the MIPS paired-single instructions. This results in illegal instruction errors in the testsuite when vectorization tests try to use those instructions. This patch teaches the compiler about that lack of support, so that warnings are given when -mpaired-single (or something implying it) is used when compiling for such a processor. I chose to test TARGET_OCTEON as the simplest conditional; since the older Octeon processors don't support hard float at all, I don't think the choice matters for them. Tests that then failed with the warning were updated to disable them for Octeon. Tested with no regressions for cross to mips64el-linux-gnu (Octeon 3). gcc: * config/mips/mips.h (ISA_HAS_PAIRED_SINGLE): Require !TARGET_OCTEON. gcc/testsuite: * gcc.target/mips/mips-3d-1.c: Use forbid_cpu=octeon.* in dg-options. * gcc.target/mips/mips-3d-2.c: Likewise. * gcc.target/mips/mips-3d-3.c: Likewise. * gcc.target/mips/mips-3d-4.c: Likewise. * gcc.target/mips/mips-3d-5.c: Likewise. * gcc.target/mips/mips-3d-6.c: Likewise. * gcc.target/mips/mips-3d-7.c: Likewise. * gcc.target/mips/mips-3d-8.c: Likewise. * gcc.target/mips/mips-3d-9.c: Likewise. * gcc.target/mips/mips-ps-1.c: Likewise. * gcc.target/mips/mips-ps-2.c: Likewise. * gcc.target/mips/mips-ps-3.c: Likewise. * gcc.target/mips/mips-ps-4.c: Likewise. * gcc.target/mips/mips-ps-5.c: Likewise. * gcc.target/mips/mips-ps-6.c: Likewise. * gcc.target/mips/mips-ps-7.c: Likewise. * gcc.target/mips/mips-ps-type.c: Likewise. * gcc.target/mips/mips-ps-type-2.c: Likewise. * gcc.target/mips/mips16-attributes-6.c: Likewise. From-SVN: r232517
This commit is contained in:
parent
46ec7a061e
commit
969028053f
|
@ -1,3 +1,8 @@
|
|||
2016-01-18 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/mips/mips.h (ISA_HAS_PAIRED_SINGLE): Require
|
||||
!TARGET_OCTEON.
|
||||
|
||||
2016-01-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/69308
|
||||
|
|
|
@ -1014,9 +1014,10 @@ struct mips_cpu_info {
|
|||
#define ISA_HAS_LXC1_SXC1 ISA_HAS_FP4
|
||||
|
||||
/* ISA has paired-single instructions. */
|
||||
#define ISA_HAS_PAIRED_SINGLE (ISA_MIPS64 \
|
||||
|| (mips_isa_rev >= 2 \
|
||||
&& mips_isa_rev <= 5))
|
||||
#define ISA_HAS_PAIRED_SINGLE ((ISA_MIPS64 \
|
||||
|| (mips_isa_rev >= 2 \
|
||||
&& mips_isa_rev <= 5)) \
|
||||
&& !TARGET_OCTEON)
|
||||
|
||||
/* ISA has conditional trap instructions. */
|
||||
#define ISA_HAS_COND_TRAP (!ISA_MIPS1 \
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
2016-01-18 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcc.target/mips/mips-3d-1.c: Use forbid_cpu=octeon.* in
|
||||
dg-options.
|
||||
* gcc.target/mips/mips-3d-2.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-3.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-4.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-5.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-6.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-7.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-8.c: Likewise.
|
||||
* gcc.target/mips/mips-3d-9.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-1.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-2.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-3.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-4.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-5.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-6.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-7.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-type.c: Likewise.
|
||||
* gcc.target/mips/mips-ps-type-2.c: Likewise.
|
||||
* gcc.target/mips/mips16-attributes-6.c: Likewise.
|
||||
|
||||
2016-01-18 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* c-c++-common/goacc/kernels-counter-vars-function-scope.c: New test.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D branch-if-any-two builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D absolute compare builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D branch-if-any-four builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D absolute-compare & branch-if-any-four builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D absolute compare (floats) builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D absolute compare (doubles) builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS-3D absolute compare and conditional move builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mips3d" } */
|
||||
/* { dg-options "-mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Matrix Multiplications */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mpaired-single" } */
|
||||
/* { dg-options "-mpaired-single forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test v2sf calculations */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mpaired-single" } */
|
||||
/* { dg-options "-mpaired-single forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS paired-single builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mpaired-single" } */
|
||||
/* { dg-options "-mpaired-single forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS paired-single conditional move */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-mpaired-single" } */
|
||||
/* { dg-options "-mpaired-single forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS paired-single comparisons */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-mpaired-single -mgp64 -ftree-vectorize" } */
|
||||
/* { dg-options "-mpaired-single -mgp64 -ftree-vectorize forbid_cpu=octeon.*" } */
|
||||
/* { dg-skip-if "requires vectorization" { *-*-* } { "-O0" "-Os" } { "" } } */
|
||||
|
||||
extern float a[] __attribute__ ((aligned (8)));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* mips-ps-2.c with an extra -ffinite-math-only option. This option
|
||||
changes the way that abs.ps is handled. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mpaired-single -ffinite-math-only" } */
|
||||
/* { dg-options "-mpaired-single -ffinite-math-only forbid_cpu=octeon.*" } */
|
||||
|
||||
/* Test MIPS paired-single builtin functions */
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* mips-ps-5.c with -mgp32 instead of -mgp64. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-mgp32 -mpaired-single -ftree-vectorize" } */
|
||||
/* { dg-options "-mgp32 -mpaired-single -ftree-vectorize forbid_cpu=octeon.*" } */
|
||||
/* { dg-skip-if "requires vectorization" { *-*-* } { "-O0" "-Os" } { "" } } */
|
||||
|
||||
extern float a[] __attribute__ ((aligned (8)));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Test v2sf calculations. The nmadd and nmsub patterns need
|
||||
-ffinite-math-only. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "(HAS_MADDPS) -mgp32 -mpaired-single -ffinite-math-only" } */
|
||||
/* { dg-options "(HAS_MADDPS) -mgp32 -mpaired-single -ffinite-math-only forbid_cpu=octeon.*" } */
|
||||
/* { dg-skip-if "nmadd and nmsub need combine" { *-*-* } { "-O0" } { "" } } */
|
||||
/* { dg-final { scan-assembler "\tcvt.ps.s\t" } } */
|
||||
/* { dg-final { scan-assembler "\tmov.ps\t" } } */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Test v2sf calculations. The nmadd and nmsub patterns need
|
||||
-ffinite-math-only. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-mpaired-single -mgp64 -ffinite-math-only" } */
|
||||
/* { dg-options "-mpaired-single -mgp64 -ffinite-math-only forbid_cpu=octeon.*" } */
|
||||
/* { dg-skip-if "nmadd and nmsub need combine" { *-*-* } { "-O0" } { "" } } */
|
||||
/* { dg-final { scan-assembler "\tcvt.ps.s\t" } } */
|
||||
/* { dg-final { scan-assembler "\tmov.ps\t" } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-mips16 addressing=absolute -mips3d" } */
|
||||
/* { dg-options "-mips16 addressing=absolute -mips3d forbid_cpu=octeon.*" } */
|
||||
|
||||
static inline NOMIPS16 float
|
||||
i1 (float f)
|
||||
|
|
Loading…
Reference in New Issue