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
This commit is contained in:
Jakub Jelinek 2015-07-08 22:29:26 +02:00 committed by Jakub Jelinek
parent 7b841a1252
commit b03b462f1f
9 changed files with 84 additions and 4 deletions

View 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.

View 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;
}

View 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

View 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);

View 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))

View 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.

View File

@ -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 ();
}

View 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

View 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