From 264856cfcd4fc0abe29f7cb931cd091893565d79 Mon Sep 17 00:00:00 2001 From: Andrew Senkevich <andrew.senkevich@intel.com> Date: Fri, 14 Oct 2016 21:10:50 +0300 Subject: [PATCH] Don't compile do_test with -mavx/-mavx2/-mavx512. Don't compile do_test (in sincos ABI tests) with -mavx, -mavx2 nor -mavx512 since they won't run on non-AVX machines. (cherry-picked from commit fe0cf8614836e2b08b802eb1f55abca75d558545) --- ChangeLog | 63 ++++++++++++++++++++++ sysdeps/x86_64/fpu/Makefile | 56 +++++++++++++------ .../fpu/test-double-libmvec-sincos-avx-main.c | 1 + .../fpu/test-double-libmvec-sincos-avx2-main.c | 1 + .../fpu/test-double-libmvec-sincos-avx512-main.c | 1 + .../x86_64/fpu/test-double-libmvec-sincos-main.c | 43 +++++++++++++++ sysdeps/x86_64/fpu/test-double-libmvec-sincos.c | 37 +++---------- .../fpu/test-float-libmvec-sincosf-avx-main.c | 1 + .../fpu/test-float-libmvec-sincosf-avx2-main.c | 1 + .../fpu/test-float-libmvec-sincosf-avx512-main.c | 1 + .../x86_64/fpu/test-float-libmvec-sincosf-main.c | 42 +++++++++++++++ sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c | 35 ++---------- 12 files changed, 204 insertions(+), 78 deletions(-) create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c #diff --git a/ChangeLog b/ChangeLog #index 59f486c..b80acd2 100644 #--- a/ChangeLog #+++ b/ChangeLog #@@ -1,3 +1,66 @@ #+2016-10-13 H.J. Lu <hjl.tools@gmail.com> #+ #+ [BZ #20384] #+ * sysdeps/x86_64/fpu/Makefile (extra-test-objs): Add #+ test-double-libmvec-sincos-avx-main.o, #+ test-double-libmvec-sincos-avx2-main.o, #+ test-double-libmvec-sincos-main.o, #+ test-float-libmvec-sincosf-avx-main.o, #+ test-float-libmvec-sincosf-avx2-main.o and #+ test-float-libmvec-sincosf-main.o. #+ test-float-libmvec-sincosf-avx512-main.o. #+ ($(objpfx)test-double-libmvec-sincos): Also link with #+ $(objpfx)test-double-libmvec-sincos-main.o. #+ ($(objpfx)test-double-libmvec-sincos-avx): Also link with #+ $(objpfx)test-double-libmvec-sincos-avx-main.o. #+ ($(objpfx)test-double-libmvec-sincos-avx2): Also link with #+ $(objpfx)test-double-libmvec-sincos-avx2-main.o. #+ ($(objpfx)test-float-libmvec-sincosf): Also link with #+ $(objpfx)test-float-libmvec-sincosf-main.o. #+ ($(objpfx)test-float-libmvec-sincosf-avx): Also link with #+ $(objpfx)test-float-libmvec-sincosf-avx2-main.o. #+ [$(config-cflags-avx512) == yes] (extra-test-objs): Add #+ test-double-libmvec-sincos-avx512-main.o and #+ ($(objpfx)test-double-libmvec-sincos-avx512): Also link with #+ $(objpfx)test-double-libmvec-sincos-avx512-main.o. #+ ($(objpfx)test-float-libmvec-sincosf-avx512): Also link with #+ $(objpfx)test-float-libmvec-sincosf-avx512-main.o. #+ (CFLAGS-test-double-libmvec-sincos.c): Removed. #+ (CFLAGS-test-float-libmvec-sincosf.c): Likewise. #+ (CFLAGS-test-double-libmvec-sincos-main.c): New. #+ (CFLAGS-test-double-libmvec-sincos-avx-main.c): Likewise. #+ (CFLAGS-test-double-libmvec-sincos-avx2-main.c): Likewise. #+ (CFLAGS-test-float-libmvec-sincosf-main.c): Likewise. #+ (CFLAGS-test-float-libmvec-sincosf-avx-main.c): Likewise. #+ (CFLAGS-test-float-libmvec-sincosf-avx2-main.c): Likewise. #+ (CFLAGS-test-float-libmvec-sincosf-avx512-main.c): Likewise. #+ (CFLAGS-test-double-libmvec-sincos-avx.c): Set to -DREQUIRE_AVX. #+ (CFLAGS-test-float-libmvec-sincosf-avx.c ): Likewise. #+ (CFLAGS-test-double-libmvec-sincos-avx2.c): Set to #+ -DREQUIRE_AVX2. #+ (CFLAGS-test-float-libmvec-sincosf-avx2.c ): Likewise. #+ (CFLAGS-test-double-libmvec-sincos-avx512.c): Set to #+ -DREQUIRE_AVX512F. #+ (CFLAGS-test-float-libmvec-sincosf-avx512.c): Likewise. #+ * sysdeps/x86_64/fpu/test-double-libmvec-sincos.c: Rewritten. #+ * sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c: Likewise. #+ * sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c: New #+ file. #+ * sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c: #+ Likewise. #+ * sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c: #+ Likewise. #+ # 2016-10-13 Andrew Senkevich <andrew.senkevich@intel.com> # # [BZ #20024] diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile index d630c19..bfd6de1 100644 --- a/sysdeps/x86_64/fpu/Makefile +++ b/sysdeps/x86_64/fpu/Makefile @@ -34,34 +34,50 @@ libmvec-tests += double-vlen2 double-vlen4 double-vlen4-avx2 \ tests += test-double-libmvec-sincos test-double-libmvec-sincos-avx \ test-double-libmvec-sincos-avx2 test-float-libmvec-sincosf \ test-float-libmvec-sincosf-avx test-float-libmvec-sincosf-avx2 +extra-test-objs += test-double-libmvec-sincos-avx-main.o \ + test-double-libmvec-sincos-avx2-main.o \ + test-double-libmvec-sincos-main.o \ + test-float-libmvec-sincosf-avx-main.o \ + test-float-libmvec-sincosf-avx2-main.o \ + test-float-libmvec-sincosf-main.o $(objpfx)test-double-libmvec-sincos: \ - $(objpfx)test-double-libmvec-sincos.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-double-libmvec-sincos.o \ + $(objpfx)test-double-libmvec-sincos-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-double-libmvec-sincos-avx: \ - $(objpfx)test-double-libmvec-sincos-avx.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-double-libmvec-sincos-avx.o \ + $(objpfx)test-double-libmvec-sincos-avx-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-double-libmvec-sincos-avx2: \ - $(objpfx)test-double-libmvec-sincos-avx2.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-double-libmvec-sincos-avx2.o \ + $(objpfx)test-double-libmvec-sincos-avx2-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-float-libmvec-sincosf: \ - $(objpfx)test-float-libmvec-sincosf.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-float-libmvec-sincosf.o \ + $(objpfx)test-float-libmvec-sincosf-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-float-libmvec-sincosf-avx: \ - $(objpfx)test-float-libmvec-sincosf-avx.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-float-libmvec-sincosf-avx.o \ + $(objpfx)test-float-libmvec-sincosf-avx-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-float-libmvec-sincosf-avx2: \ - $(objpfx)test-float-libmvec-sincosf-avx2.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-float-libmvec-sincosf-avx2.o \ + $(objpfx)test-float-libmvec-sincosf-avx2-main.o $(objpfx)init-arch.o $(libmvec) ifeq (yes,$(config-cflags-avx512)) libmvec-tests += double-vlen8 float-vlen16 tests += test-double-libmvec-sincos-avx512 test-float-libmvec-sincosf-avx512 +extra-test-objs += test-double-libmvec-sincos-avx512-main.o \ + test-float-libmvec-sincosf-avx512-main.o $(objpfx)test-double-libmvec-sincos-avx512: \ - $(objpfx)test-double-libmvec-sincos-avx512.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-double-libmvec-sincos-avx512.o \ + $(objpfx)test-double-libmvec-sincos-avx512-main.o $(objpfx)init-arch.o $(libmvec) $(objpfx)test-float-libmvec-sincosf-avx512: \ - $(objpfx)test-float-libmvec-sincosf-avx512.o $(objpfx)init-arch.o $(libmvec) + $(objpfx)test-float-libmvec-sincosf-avx512.o \ + $(objpfx)test-float-libmvec-sincosf-avx512-main.o $(objpfx)init-arch.o $(libmvec) endif double-vlen4-arch-ext-cflags = -mavx @@ -80,14 +96,20 @@ CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags) CFLAGS-test-float-vlen8-avx2.c = $(libm-test-vec-cflags) CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags) -CFLAGS-test-double-libmvec-sincos.c = $(libmvec-sincos-cflags) -CFLAGS-test-double-libmvec-sincos-avx.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags) -DREQUIRE_AVX -CFLAGS-test-double-libmvec-sincos-avx2.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags) -DREQUIRE_AVX2 -CFLAGS-test-double-libmvec-sincos-avx512.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags) -DREQUIRE_AVX512F - -CFLAGS-test-float-libmvec-sincosf.c = $(libmvec-sincos-cflags) -CFLAGS-test-float-libmvec-sincosf-avx.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags) -DREQUIRE_AVX -CFLAGS-test-float-libmvec-sincosf-avx2.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags) -DREQUIRE_AVX2 -CFLAGS-test-float-libmvec-sincosf-avx512.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags) -DREQUIRE_AVX512F +CFLAGS-test-double-libmvec-sincos-main.c = $(libmvec-sincos-cflags) +CFLAGS-test-double-libmvec-sincos-avx.c = -DREQUIRE_AVX +CFLAGS-test-double-libmvec-sincos-avx-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags) +CFLAGS-test-double-libmvec-sincos-avx2.c = -DREQUIRE_AVX2 +CFLAGS-test-double-libmvec-sincos-avx2-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags) +CFLAGS-test-double-libmvec-sincos-avx512.c = -DREQUIRE_AVX512F +CFLAGS-test-double-libmvec-sincos-avx512-main.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags) + +CFLAGS-test-float-libmvec-sincosf-main.c = $(libmvec-sincos-cflags) +CFLAGS-test-float-libmvec-sincosf-avx.c = -DREQUIRE_AVX +CFLAGS-test-float-libmvec-sincosf-avx-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags) +CFLAGS-test-float-libmvec-sincosf-avx2.c = -DREQUIRE_AVX2 +CFLAGS-test-float-libmvec-sincosf-avx2-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags) +CFLAGS-test-float-libmvec-sincosf-avx512.c = -DREQUIRE_AVX512F +CFLAGS-test-float-libmvec-sincosf-avx512-main.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags) endif endif diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c new file mode 100644 index 0000000..fc2ffea --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c new file mode 100644 index 0000000..fc2ffea --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c new file mode 100644 index 0000000..fc2ffea --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c @@ -0,0 +1 @@ +#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c new file mode 100644 index 0000000..afa3615 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c @@ -0,0 +1,43 @@ +/* Test for vector sincos ABI. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <math.h> + +#define N 1000 +double x[N], s[N], c[N]; +double* s_ptrs[N]; +double* c_ptrs[N]; + +int +test_sincos_abi (void) +{ + int i; + + for(i = 0; i < N; i++) + { + x[i] = i / 3; + s_ptrs[i] = &s[i]; + c_ptrs[i] = &c[i]; + } + +#pragma omp simd + for(i = 0; i < N; i++) + sincos (x[i], s_ptrs[i], c_ptrs[i]); + + return 0; +} diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c index 9d80df2..c656ae4 100644 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c @@ -16,54 +16,29 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <math.h> #include <math-tests-arch.h> -#define N 1000 -double x[N], s[N], c[N]; -double* s_ptrs[N]; -double* c_ptrs[N]; +extern int test_sincos_abi (void); + int arch_check = 1; static void -init_arg (void) +check_arch (void) { - int i; - INIT_ARCH_EXT; CHECK_ARCH_EXT; - arch_check = 0; - - for(i = 0; i < N; i++) - { - x[i] = i / 3; - s_ptrs[i] = &s[i]; - c_ptrs[i] = &c[i]; - } } static int -test_sincos_abi (void) +do_test (void) { - int i; - - init_arg (); + check_arch (); if (arch_check) return 77; -#pragma omp simd - for(i = 0; i < N; i++) - sincos (x[i], s_ptrs[i], c_ptrs[i]); - - return 0; -} - -static int -do_test (void) -{ - return test_sincos_abi (); + return test_sincos_abi (); } #define TEST_FUNCTION do_test () diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c new file mode 100644 index 0000000..558e2ac --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c new file mode 100644 index 0000000..558e2ac --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c new file mode 100644 index 0000000..558e2ac --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c @@ -0,0 +1 @@ +#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c new file mode 100644 index 0000000..271468f --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c @@ -0,0 +1,42 @@ +/* Test for vector sincosf ABI. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <math.h> + +#define N 1000 +float x[N], s[N], c[N]; +float *s_ptrs[N]; +float *c_ptrs[N]; + +int +test_sincosf_abi (void) +{ + int i; + for(i = 0; i < N; i++) + { + x[i] = i / 3; + s_ptrs[i] = &s[i]; + c_ptrs[i] = &c[i]; + } + +#pragma omp simd + for(i = 0; i < N; i++) + sincosf (x[i], s_ptrs[i], c_ptrs[i]); + + return 0; +} diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c index 03e8b18..b1c004b 100644 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c @@ -16,53 +16,28 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <math.h> #include <math-tests-arch.h> -#define N 1000 -float x[N], s[N], c[N]; -float *s_ptrs[N]; -float *c_ptrs[N]; +extern int test_sincosf_abi (void); + int arch_check = 1; static void -init_arg (void) +check_arch (void) { - int i; - INIT_ARCH_EXT; CHECK_ARCH_EXT; - arch_check = 0; - - for(i = 0; i < N; i++) - { - x[i] = i / 3; - s_ptrs[i] = &s[i]; - c_ptrs[i] = &c[i]; - } } static int -test_sincosf_abi (void) +do_test (void) { - int i; - - init_arg (); + check_arch (); if (arch_check) return 77; -#pragma omp simd - for(i = 0; i < N; i++) - sincosf (x[i], s_ptrs[i], c_ptrs[i]); - - return 0; -} - -static int -do_test (void) -{ return test_sincosf_abi (); } -- 2.10.2