Hello! This patch increases/decreases array sizes a bit to prevent loop unrolling and adds appropriate -no-* ABI flags.
2011-05-04 Uros Bizjak <ubiz...@gmail.com> * gcc.target/i386/recip-vec-divf.c: Decrease array sizes. * gcc.target/i386/recip-vec-sqrtf.c: Ditto. * gcc.target/i386/recip-vec-divf-avx.c: Increase array sizes. * gcc.target/i386/recip-vec-sqrtf-avx.c: Ditto. Update scan times. * gcc.target/i386/ssefn-1.c: Add -mno-sse2 to dg-options. * gcc.target/i386/pr38824.c: Ditto. * gcc.target/i386/vecinit-1.c: Add -mno-sse4 to dg-options. * gcc.target/i386/vecinit-2.c: Ditto. * gcc.target/i386/sse-19.c: Add -mno-ssse3 to dg-options. * gcc.target/i386/parity-1.c: Add -mno-popcnt to dg-options. * gcc.target/i386/parity-2.c: Ditto. * gcc.target/i386/incoming-8.c: Add -mno-avx to dg-options. Tested on x86_64-pc-linux-gnu {,-m32} AVX and non-AVX target, committed to mainline SVN. Uros.
Index: recip-vec-divf-avx.c =================================================================== --- recip-vec-divf-avx.c (revision 173376) +++ recip-vec-divf-avx.c (working copy) @@ -1,15 +1,15 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[32]; +float b[32]; +float r[32]; void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = a[i] / b[i]; } Index: ssefn-1.c =================================================================== --- ssefn-1.c (revision 173376) +++ ssefn-1.c (working copy) @@ -8,7 +8,7 @@ /* { dg-final { scan-assembler-not "movsd" } } */ /* { dg-final { scan-assembler-not "mulsd" } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */ -/* { dg-options "-O2 -march=i386 -msse -mfpmath=sse -fno-inline" } */ +/* { dg-options "-O2 -march=i386 -msse -mno-sse2 -mfpmath=sse -fno-inline" } */ static float xs (void) { Index: parity-1.c =================================================================== --- parity-1.c (revision 173376) +++ parity-1.c (working copy) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8" } */ +/* { dg-options "-O2 -march=k8 -mno-popcnt" } */ /* { dg-final { scan-assembler "setnp" } } */ int foo(unsigned int x) Index: vecinit-2.c =================================================================== --- vecinit-2.c (revision 173376) +++ vecinit-2.c (working copy) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8 -msse2" } */ +/* { dg-options "-O2 -march=k8 -msse2 -mno-sse4" } */ #define vector __attribute__((vector_size(16))) Index: sse-19.c =================================================================== --- sse-19.c (revision 173376) +++ sse-19.c (working copy) @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=x86-64" } } */ -/* { dg-options "-O3 -march=x86-64 -msse2" } */ +/* { dg-options "-O3 -march=x86-64 -msse2 -mno-ssse3" } */ /* { dg-final { scan-assembler "punpcklbw" } } */ extern void abort(); #include <emmintrin.h> Index: recip-vec-sqrtf.c =================================================================== --- recip-vec-sqrtf.c (revision 173376) +++ recip-vec-sqrtf.c (working copy) @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[4]; +float b[4]; +float r[4]; extern float sqrtf (float); @@ -11,7 +11,7 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = a[i] / sqrtf (b[i]); } @@ -19,7 +19,7 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = sqrtf (a[i] / b[i]); } @@ -27,7 +27,7 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = sqrtf (a[i]); } Index: vecinit-1.c =================================================================== --- vecinit-1.c (revision 173376) +++ vecinit-1.c (working copy) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8 -msse2" } */ +/* { dg-options "-O2 -march=k8 -msse2 -mno-sse4" } */ #define vector __attribute__((vector_size(16))) Index: pr38824.c =================================================================== --- pr38824.c (revision 173376) +++ pr38824.c (working copy) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -msse" } */ +/* { dg-options "-O2 -msse -mno-sse2" } */ typedef float v4sf __attribute__ ((__vector_size__ (16))); Index: parity-2.c =================================================================== --- parity-2.c (revision 173376) +++ parity-2.c (working copy) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=k8" } */ +/* { dg-options "-O2 -march=k8 -mno-popcnt" } */ /* { dg-final { scan-assembler "setnp" } } */ int foo(unsigned long long int x) Index: recip-vec-divf.c =================================================================== --- recip-vec-divf.c (revision 173376) +++ recip-vec-divf.c (working copy) @@ -1,15 +1,15 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[4]; +float b[4]; +float r[4]; void t1(void) { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 4; i++) r[i] = a[i] / b[i]; } Index: recip-vec-sqrtf-avx.c =================================================================== --- recip-vec-sqrtf-avx.c (revision 173376) +++ recip-vec-sqrtf-avx.c (working copy) @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip" } */ -float a[16]; -float b[16]; -float r[16]; +float a[32]; +float b[32]; +float r[32]; extern float sqrtf (float); @@ -11,7 +11,7 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = a[i] / sqrtf (b[i]); } @@ -19,7 +19,7 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = sqrtf (a[i] / b[i]); } @@ -27,9 +27,8 @@ { int i; - for (i = 0; i < 16; i++) + for (i = 0; i < 32; i++) r[i] = sqrtf (a[i]); } -/* Last loop is small enough to be fully unrolled. */ -/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 6 } } */ +/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 3 } } */ Index: incoming-8.c =================================================================== --- incoming-8.c (revision 173376) +++ incoming-8.c (working copy) @@ -1,6 +1,6 @@ /* PR target/40838 */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ -/* { dg-options "-w -mstackrealign -O3 -msse2 -mpreferred-stack-boundary=4" } */ +/* { dg-options "-w -mstackrealign -O3 -msse2 -mno-avx -mpreferred-stack-boundary=4" } */ float foo (float f)