If you build an x86_64 toolchain with --with-arch enabling various
instruction set extensions by default, this causes some tests to fail
that aren't expecting those extensions to be enabled.  This patch
fixes various tests failing like that for an x86_64-linux-gnu
toolchain configured --with-arch=bdver3, generally by using
appropriate -mno-* options in the tests, or in the case of
gcc.dg/pr45416.c by adjusting the scan-assembler to allow the
alternative instruction that gets used in this case.  It's quite
likely other such failures appear for other --with-arch choices.

Tested x86_64-linux-gnu.  OK to commit?

In addition to the failures fixed by this patch, there are many
gcc.dg/vect tests where having additional vector extensions enabled
breaks their expectations; I'm not sure of the best way to handle
those.  And you get

FAIL: gcc.target/i386/avx512f-vfmaddXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmaddXXXps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmaddsubXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmaddsubXXXps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmsubXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmsubXXXps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmsubaddXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfmsubaddXXXps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfnmaddXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfnmaddXXXps-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfnmsubXXXpd-2.c (test for excess errors)
FAIL: gcc.target/i386/avx512f-vfnmsubXXXps-2.c (test for excess errors)

which are assembler errors such as "operand type mismatch for
`vfmaddpd'" - it looks like the compiler isn't really prepared for the
-mavx512f -mfma4 combination, but I'm not sure what the best way to
handle it is (producing invalid output doesn't seem right, however).

If you test with -march=bdver3 in the multilib options (runtest
--target_board=unix/-march=bdver3) rather than as the configured
default, you get extra failures for the usual reason of multilib
options going after the options from dg-options (which I propose to
address in the usual way using dg-skip-if for -march= options
different from the one present in dg-options).

2014-03-28  Joseph Myers  <jos...@codesourcery.com>

        * gcc.dg/pr45416.c: Allow bextr on x86.
        * gcc.target/i386/fma4-builtin.c, gcc.target/i386/fma4-fma-2.c,
        gcc.target/i386/fma4-fma.c, gcc.target/i386/fma4-vector-2.c,
        gcc.target/i386/fma4-vector.c: Use -mno-fma.
        * gcc.target/i386/l_fma_double_1.c,
        gcc.target/i386/l_fma_double_2.c,
        gcc.target/i386/l_fma_double_3.c,
        gcc.target/i386/l_fma_double_4.c,
        gcc.target/i386/l_fma_double_5.c,
        gcc.target/i386/l_fma_double_6.c, gcc.target/i386/l_fma_float_1.c,
        gcc.target/i386/l_fma_float_2.c, gcc.target/i386/l_fma_float_3.c,
        gcc.target/i386/l_fma_float_4.c, gcc.target/i386/l_fma_float_5.c,
        gcc.target/i386/l_fma_float_6.c: Use -mno-fma4.
        * gcc.target/i386/pr27971.c: Use -mno-tbm.
        * gcc.target/i386/pr42542-4a.c: Use -mno-avx.
        * gcc.target/i386/pr59390.c: Use -mno-fma -mno-fma4.

Index: gcc/testsuite/gcc.dg/pr45416.c
===================================================================
--- gcc/testsuite/gcc.dg/pr45416.c      (revision 208882)
+++ gcc/testsuite/gcc.dg/pr45416.c      (working copy)
@@ -9,7 +9,7 @@
    return 0;
 }
 
-/* { dg-final { scan-assembler "andl" { target i?86-*-linux* i?86-*-gnu* 
x86_64-*-linux* } } } " */
+/* { dg-final { scan-assembler "andl|bextr" { target i?86-*-linux* i?86-*-gnu* 
x86_64-*-linux* } } } " */
 /* { dg-final { scan-assembler-not "setne" { target i?86-*-linux* i?86-*-gnu* 
x86_64-*-linux* } } }" */
 /* { dg-final { scan-assembler "and|ubfx"  { target arm*-*-* } } } */
 /* { dg-final { scan-assembler-not "moveq" { target arm*-*-* } } }" */
Index: gcc/testsuite/gcc.target/i386/pr27971.c
===================================================================
--- gcc/testsuite/gcc.target/i386/pr27971.c     (revision 208882)
+++ gcc/testsuite/gcc.target/i386/pr27971.c     (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O2 -mno-tbm" } */
 
 unsigned array[4];
 
Index: gcc/testsuite/gcc.target/i386/l_fma_double_5.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_5.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_5.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_float_6.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_6.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_6.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/pr42542-4a.c
===================================================================
--- gcc/testsuite/gcc.target/i386/pr42542-4a.c  (revision 208882)
+++ gcc/testsuite/gcc.target/i386/pr42542-4a.c  (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -msse4.2 -ftree-vectorize" } */
+/* { dg-options "-O1 -msse4.2 -ftree-vectorize -mno-avx" } */
 
 #include "pr42542-4.c"
 
Index: gcc/testsuite/gcc.target/i386/fma4-vector-2.c
===================================================================
--- gcc/testsuite/gcc.target/i386/fma4-vector-2.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/fma4-vector-2.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic" } */
+/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic -mno-fma" } */
 
 float r[256], s[256];
 float x[256];
Index: gcc/testsuite/gcc.target/i386/fma4-builtin.c
===================================================================
--- gcc/testsuite/gcc.target/i386/fma4-builtin.c        (revision 208882)
+++ gcc/testsuite/gcc.target/i386/fma4-builtin.c        (working copy)
@@ -2,7 +2,7 @@
    and add instructions FMA4 systems.  */
 
 /* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -mfma4" } */
+/* { dg-options "-O2 -mfma4 -mno-fma" } */
 
 #ifndef __FP_FAST_FMAF
 # error "__FP_FAST_FMAF should be defined"
Index: gcc/testsuite/gcc.target/i386/l_fma_double_2.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_2.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_2.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_float_3.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_3.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_3.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_double_6.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_6.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_6.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/fma4-fma.c
===================================================================
--- gcc/testsuite/gcc.target/i386/fma4-fma.c    (revision 208882)
+++ gcc/testsuite/gcc.target/i386/fma4-fma.c    (working copy)
@@ -3,7 +3,7 @@
    vfnmsubss on FMA4 systems.  */
 
 /* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -mfma4" } */
+/* { dg-options "-O2 -mfma4 -mno-fma" } */
 
 extern void exit (int);
 
Index: gcc/testsuite/gcc.target/i386/fma4-fma-2.c
===================================================================
--- gcc/testsuite/gcc.target/i386/fma4-fma-2.c  (revision 208882)
+++ gcc/testsuite/gcc.target/i386/fma4-fma-2.c  (working copy)
@@ -3,7 +3,7 @@
    vfnmsubss on FMA4 systems.  */
 
 /* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -funsafe-math-optimizations -mfma4" } */
+/* { dg-options "-O2 -funsafe-math-optimizations -mfma4 -mno-fma" } */
 
 extern void exit (int);
 
Index: gcc/testsuite/gcc.target/i386/l_fma_double_3.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_3.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_3.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_float_4.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_4.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_4.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/pr59390.c
===================================================================
--- gcc/testsuite/gcc.target/i386/pr59390.c     (revision 208882)
+++ gcc/testsuite/gcc.target/i386/pr59390.c     (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-std=c99 -O3" } */
+/* { dg-options "-std=c99 -O3 -mno-fma -mno-fma4" } */
 
 extern double fma (double, double, double);
 void fun() __attribute__((target("fma")));
Index: gcc/testsuite/gcc.target/i386/l_fma_float_1.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_1.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_1.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_double_4.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_4.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_4.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_float_5.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_5.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_5.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/fma4-vector.c
===================================================================
--- gcc/testsuite/gcc.target/i386/fma4-vector.c (revision 208882)
+++ gcc/testsuite/gcc.target/i386/fma4-vector.c (working copy)
@@ -2,7 +2,7 @@
    instructions vector into vfmaddps on FMA4 systems.  */
 
 /* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic" } */
+/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic -mno-fma" } */
 
 extern void exit (int);
 
Index: gcc/testsuite/gcc.target/i386/l_fma_double_1.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_double_1.c      (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_double_1.c      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */
Index: gcc/testsuite/gcc.target/i386/l_fma_float_2.c
===================================================================
--- gcc/testsuite/gcc.target/i386/l_fma_float_2.c       (revision 208882)
+++ gcc/testsuite/gcc.target/i386/l_fma_float_2.c       (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */
+/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic 
-mno-fma4" } */
 
 /* Test that the compiler properly optimizes floating point multiply
    and add instructions into FMA3 instructions.  */

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to