diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-07-08 22:29:26 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-07-08 22:29:26 +0200 |
commit | b03b462f1ffdef448aa666d8079cd047bcddee77 (patch) | |
tree | c4559f09b52e8af65fdf825d118170fc012ae9c9 /gcc | |
parent | 7b841a1252c610d817f1ea0fba140834e5443e7f (diff) | |
download | gcc-b03b462f1ffdef448aa666d8079cd047bcddee77.zip gcc-b03b462f1ffdef448aa666d8079cd047bcddee77.tar.gz gcc-b03b462f1ffdef448aa666d8079cd047bcddee77.tar.bz2 |
c-omp.c (c_omp_declare_simd_clauses_to_numbers): If all clauses are to be removed, return NULL rather than original clauses list.
* c-omp.c (c_omp_declare_simd_clauses_to_numbers): If all clauses
are to be removed, return NULL rather than original clauses list.
* decl.c (grokfndecl): Handle flag_openmp_simd like flag_openmp.
* pt.c (apply_late_template_attributes): Likewise.
* g++.dg/vect/vect.exp: Run also simd* tests.
* gcc.dg/vect/tree-vect.h (abort, exit): For C++ use extern "C".
(check_vect): Fix up get_cpuid call for C++.
* g++.dg/vect/simd-clone-1.cc: New test.
From-SVN: r225583
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-omp.c | 2 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/vect/simd-clone-1.cc | 55 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/vect/vect.exp | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/tree-vect.h | 8 |
9 files changed, 84 insertions, 4 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 63ba714..63d592d 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2015-07-08 Jakub Jelinek <jakub@redhat.com> + + * c-omp.c (c_omp_declare_simd_clauses_to_numbers): If all clauses + are to be removed, return NULL rather than original clauses list. + 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * array-notation-common.c: Adjust includes. diff --git a/gcc/c-family/c-omp.c b/gcc/c-family/c-omp.c index 607d16d..cdd2ee8 100644 --- a/gcc/c-family/c-omp.c +++ b/gcc/c-family/c-omp.c @@ -1040,6 +1040,8 @@ c_omp_declare_simd_clauses_to_numbers (tree parms, tree clauses) for (i = 0; i < len; i++) OMP_CLAUSE_CHAIN (clvec[i]) = (i < len - 1) ? clvec[i + 1] : NULL_TREE; } + else + clauses = NULL_TREE; clvec.release (); return clauses; } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e469156..74b746a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2015-07-08 Jakub Jelinek <jakub@redhat.com> + + * decl.c (grokfndecl): Handle flag_openmp_simd like flag_openmp. + * pt.c (apply_late_template_attributes): Likewise. + 2015-07-08 Marek Polacek <polacek@redhat.com> PR c++/66748 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b70a2cc..db8b1aa 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7910,7 +7910,7 @@ grokfndecl (tree ctype, if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl)) TREE_NOTHROW (decl) = 1; - if (flag_openmp || flag_cilkplus) + if (flag_openmp || flag_openmp_simd || flag_cilkplus) { /* Adjust "omp declare simd" attributes. */ tree ods = lookup_attribute ("omp declare simd", *attrlist); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 2f336ed..d3e9d31 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -9071,7 +9071,7 @@ apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags, { *p = TREE_CHAIN (t); TREE_CHAIN (t) = NULL_TREE; - if ((flag_openmp || flag_cilkplus) + if ((flag_openmp || flag_openmp_simd || flag_cilkplus) && is_attribute_p ("omp declare simd", get_attribute_name (t)) && TREE_VALUE (t)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3fa2511..d883a7c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-07-08 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/vect/vect.exp: Run also simd* tests. + * gcc.dg/vect/tree-vect.h (abort, exit): For C++ use extern "C". + (check_vect): Fix up get_cpuid call for C++. + * g++.dg/vect/simd-clone-1.cc: New test. + 2015-07-08 H.J. Lu <hongjiu.lu@intel.com> * gcc.target/i386/pr37870.c (dg-options): Add -mlong-double-80. diff --git a/gcc/testsuite/g++.dg/vect/simd-clone-1.cc b/gcc/testsuite/g++.dg/vect/simd-clone-1.cc new file mode 100644 index 0000000..f0be59a --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/simd-clone-1.cc @@ -0,0 +1,55 @@ +// { dg-require-effective-target vect_simd_clones } +// { dg-additional-options "-fopenmp-simd -fno-inline" } +// { dg-additional-options "-mavx" { target avx_runtime } } + +#include "../../gcc.dg/vect/tree-vect.h" + +struct S +{ + int s; + #pragma omp declare simd notinbranch linear(x) + int f (int x); +}; + +#pragma omp declare simd notinbranch linear(x) +int +S::f (int x) +{ + return x; +} + +template <int N> +struct T +{ + int t; + #pragma omp declare simd notinbranch linear(x) + int f (int x); +}; + +#pragma omp declare simd notinbranch linear(x) +template <int N> +int +T<N>::f (int x) +{ + return x; +} + +void +do_main () +{ + int i, r = 0; + S s; + T<0> t; + #pragma omp simd reduction(+:r) + for (i = 0; i < 64; i++) + r += s.f (i) + t.f (i); + if (r != 64 * 63) + abort (); +} + +int +main () +{ + check_vect (); + do_main (); +} diff --git a/gcc/testsuite/g++.dg/vect/vect.exp b/gcc/testsuite/g++.dg/vect/vect.exp index aba1866..0492cc3 100644 --- a/gcc/testsuite/g++.dg/vect/vect.exp +++ b/gcc/testsuite/g++.dg/vect/vect.exp @@ -58,7 +58,7 @@ lappend VECT_SLP_CFLAGS "-fdump-tree-slp-details" dg-init # Main loop. -g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.{c,cc,S} ]] \ +g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/{pr,simd}*.{c,cc,S} ]] \ "" $DEFAULT_VECTCFLAGS g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-pr*.{c,cc,S} ]] \ "" $VECT_SLP_CFLAGS diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h index 2f21c2b..0853e3f 100644 --- a/gcc/testsuite/gcc.dg/vect/tree-vect.h +++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h @@ -5,8 +5,14 @@ # include "cpuid.h" #endif +#ifdef __cplusplus +extern "C" { +#endif extern void abort (void); extern void exit (int); +#ifdef __cplusplus +} +#endif static void sig_ill_handler (int sig) @@ -26,7 +32,7 @@ check_vect (void) asm volatile (".long 0x10000484"); #elif defined(__i386__) || defined(__x86_64__) { - int a, b, c, d, want_level, want_c, want_d; + unsigned int a, b, c, d, want_level, want_c, want_d; /* Determine what instruction set we've been compiled for, and detect that we're running with it. This allows us to at least do a compile |