Message ID | Pine.LNX.4.64.1403282143360.750@digraph.polyomino.org.uk |
---|---|
State | New |
Headers | show |
On Fri, Mar 28, 2014 at 2:46 PM, Joseph S. Myers <joseph@codesourcery.com> wrote: > 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 multilibhttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=59971 This is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59971 > 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). Here is a patch: http://gcc.gnu.org/ml/gcc-patches/2014-01/msg01891.html
On Fri, Mar 28, 2014 at 10:46 PM, Joseph S. Myers <joseph@codesourcery.com> wrote: > 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). I will look into these. > 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 <joseph@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. OK. Thanks, Uros.
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. */