c-omp.c (c_omp_declare_simd_clauses_to_numbers): If all clauses are to be removed...
authorJakub Jelinek <jakub@redhat.com>
Wed, 8 Jul 2015 20:29:26 +0000 (22:29 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 8 Jul 2015 20:29:26 +0000 (22:29 +0200)
* 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

gcc/c-family/ChangeLog
gcc/c-family/c-omp.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/vect/simd-clone-1.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/vect/vect.exp
gcc/testsuite/gcc.dg/vect/tree-vect.h

index 63ba71450cca9144e94557de0e4347e7e31cf3cf..63d592ddc5649283414131cc1d865985c3192214 100644 (file)
@@ -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.
index 607d16d6e28a81575bd3008fedeb0edfc3abdc5c..cdd2ee83d76a67019749250b38ebb1830707d5d9 100644 (file)
@@ -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;
 }
index e469156c8ff645db0661084d6a6921d3c3511c6b..74b746a53982576e5d1ecef6ab9f5ccfc0de7c03 100644 (file)
@@ -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
index b70a2cc1b0f51748c3a11c5ae7918df610e74668..db8b1aa17cab622d1a85ae59b845df01e57ad227 100644 (file)
@@ -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);
index 2f336ed41da0a81978b28b7995802975be56c31c..d3e9d3175b5ef8ff3c35e4fceef0d32168494478 100644 (file)
@@ -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))
index 3fa2511c40fcbcb42c20e76953d55b1b75fe1dc9..d883a7c8406e4ec1243f78819ee83b036da97817 100644 (file)
@@ -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 (file)
index 0000000..f0be59a
--- /dev/null
@@ -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 ();
+}
index aba1866a3ac50c959dd276b1295b0982d7129d8e..0492cc392bdc19082a1bb1aa91eba39b052dfa69 100644 (file)
@@ -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
index 2f21c2b167350ea118413f76f4bb56af9acd7c24..0853e3f76be96090211749b1df3e897e4db5874d 100644 (file)
@@ -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