aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-11-05 08:29:47 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2013-11-05 08:29:47 +0100
commit6d7f7e0a635298c307d51d3eb166905b5bcaf07a (patch)
tree789e5dc3cac9b9f008c01fc7464776cb40592969 /gcc/c
parent6310844b657ce0658c3d1061b56ffc88e7beaeb0 (diff)
downloadgcc-6d7f7e0a635298c307d51d3eb166905b5bcaf07a.zip
gcc-6d7f7e0a635298c307d51d3eb166905b5bcaf07a.tar.gz
gcc-6d7f7e0a635298c307d51d3eb166905b5bcaf07a.tar.bz2
invoke.texi (-fopenmp-simd): Document new option.
2013-11-05 Tobias Burnus <burnus@net-b.de> gcc/ * doc/invoke.texi (-fopenmp-simd): Document new option. * gimplify.c (gimplify_body): Accept -fopenmp-simd. * omp-low.c (execute_expand_omp, execute_lower_omp): Ditto. * tree.c (attribute_value_equal): Ditto. gcc/fortran/ * lang.opt (fopenmp-simd): New option. * gfortran.h (gfc_option_t): Add gfc_flag_openmp_simd. * options.c (gfc_handle_option): Handle it. gcc/c-family/ * c.opt (fopenmp-simd): New option. * c-pragma.c (omp_pragmas): Move pragmas which can contain simd * to ... (omp_pragmas): ... this new struct. (c_pp_lookup_pragma): Also walk omp_pragmas. (init_pragma): Init pragmas for -fopenmp-simd. gcc/c * c-parser.c (c_parser_omp_for, c_parser_omp_parallel, c_parser_omp_distribute, c_parser_omp_teams, c_parser_omp_target, c_parser_omp_declare): Handle -fopenmp-simd. gcc/cp * parser.c (cp_parser_omp_for, cp_parser_omp_parallel, cp_parser_omp_distribute, cp_parser_omp_teams, cp_parser_omp_target, cp_parser_omp_declare): Handle -fopenmp-simd. gcc/testsuite/ * g++.dg/gomp/openmp-simd-1.C: New. * g++.dg/gomp/openmp-simd-2.C: New. * gcc.dg/gomp/openmp-simd-1.c: New. * gcc.dg/gomp/openmp-simd-2.c: New. From-SVN: r204382
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog7
-rw-r--r--gcc/c/c-parser.c71
2 files changed, 66 insertions, 12 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index efb4ba8..9a9eed3 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-05 Tobias Burnus <burnus@net-b.de>
+
+ * c-parser.c (c_parser_omp_for, c_parser_omp_parallel,
+ c_parser_omp_distribute, c_parser_omp_teams,
+ c_parser_omp_target, c_parser_omp_declare): Handle
+ -fopenmp-simd.
+
2013-11-03 Marek Polacek <polacek@redhat.com>
* c-decl.c (grokdeclarator): Add VLA instrumentation.
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index a8f4774..4ae30c3 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -11616,6 +11616,8 @@ c_parser_omp_for (location_t loc, c_parser *parser,
cclauses = cclauses_buf;
c_parser_consume_token (parser);
+ if (!flag_openmp) /* flag_openmp_simd */
+ return c_parser_omp_simd (loc, parser, p_name, mask, cclauses);
block = c_begin_compound_stmt (true);
ret = c_parser_omp_simd (loc, parser, p_name, mask, cclauses);
block = c_end_compound_stmt (loc, block, true);
@@ -11630,6 +11632,11 @@ c_parser_omp_for (location_t loc, c_parser *parser,
return ret;
}
}
+ if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return NULL_TREE;
+ }
clauses = c_parser_omp_all_clauses (parser, mask, p_name, cclauses == NULL);
if (cclauses)
@@ -11825,6 +11832,8 @@ c_parser_omp_parallel (location_t loc, c_parser *parser,
cclauses = cclauses_buf;
c_parser_consume_token (parser);
+ if (!flag_openmp) /* flag_openmp_simd */
+ return c_parser_omp_for (loc, parser, p_name, mask, cclauses);
block = c_begin_omp_parallel ();
c_parser_omp_for (loc, parser, p_name, mask, cclauses);
stmt
@@ -11839,6 +11848,11 @@ c_parser_omp_parallel (location_t loc, c_parser *parser,
c_parser_skip_to_pragma_eol (parser);
return NULL_TREE;
}
+ else if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return NULL_TREE;
+ }
else if (c_parser_next_token_is (parser, CPP_NAME))
{
const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
@@ -12069,6 +12083,14 @@ c_parser_omp_distribute (location_t loc, c_parser *parser,
if (cclauses == NULL)
cclauses = cclauses_buf;
c_parser_consume_token (parser);
+ if (!flag_openmp) /* flag_openmp_simd */
+ {
+ if (simd)
+ return c_parser_omp_simd (loc, parser, p_name, mask, cclauses);
+ else
+ return c_parser_omp_parallel (loc, parser, p_name, mask,
+ cclauses);
+ }
block = c_begin_compound_stmt (true);
if (simd)
ret = c_parser_omp_simd (loc, parser, p_name, mask, cclauses);
@@ -12086,6 +12108,11 @@ c_parser_omp_distribute (location_t loc, c_parser *parser,
return ret;
}
}
+ if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return NULL_TREE;
+ }
clauses = c_parser_omp_all_clauses (parser, mask, p_name, cclauses == NULL);
if (cclauses)
@@ -12134,6 +12161,8 @@ c_parser_omp_teams (location_t loc, c_parser *parser,
cclauses = cclauses_buf;
c_parser_consume_token (parser);
+ if (!flag_openmp) /* flag_openmp_simd */
+ return c_parser_omp_distribute (loc, parser, p_name, mask, cclauses);
block = c_begin_compound_stmt (true);
ret = c_parser_omp_distribute (loc, parser, p_name, mask, cclauses);
block = c_end_compound_stmt (loc, block, true);
@@ -12147,6 +12176,11 @@ c_parser_omp_teams (location_t loc, c_parser *parser,
return add_stmt (ret);
}
}
+ if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return NULL_TREE;
+ }
clauses = c_parser_omp_all_clauses (parser, mask, p_name, cclauses == NULL);
if (cclauses)
@@ -12258,24 +12292,16 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context)
{
const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
- if (strcmp (p, "data") == 0)
- {
- c_parser_consume_token (parser);
- c_parser_omp_target_data (loc, parser);
- return true;
- }
- else if (strcmp (p, "update") == 0)
- {
- c_parser_consume_token (parser);
- return c_parser_omp_target_update (loc, parser, context);
- }
- else if (strcmp (p, "teams") == 0)
+ if (strcmp (p, "teams") == 0)
{
tree cclauses[C_OMP_CLAUSE_SPLIT_COUNT];
char p_name[sizeof ("#pragma omp target teams distribute "
"parallel for simd")];
c_parser_consume_token (parser);
+ if (!flag_openmp) /* flag_openmp_simd */
+ return c_parser_omp_teams (loc, parser, p_name,
+ OMP_TARGET_CLAUSE_MASK, cclauses);
strcpy (p_name, "#pragma omp target");
keep_next_level ();
tree block = c_begin_compound_stmt (true);
@@ -12291,6 +12317,22 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context)
add_stmt (stmt);
return true;
}
+ else if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return NULL_TREE;
+ }
+ else if (strcmp (p, "data") == 0)
+ {
+ c_parser_consume_token (parser);
+ c_parser_omp_target_data (loc, parser);
+ return true;
+ }
+ else if (strcmp (p, "update") == 0)
+ {
+ c_parser_consume_token (parser);
+ return c_parser_omp_target_update (loc, parser, context);
+ }
}
tree stmt = make_node (OMP_TARGET);
@@ -12918,6 +12960,11 @@ c_parser_omp_declare (c_parser *parser, enum pragma_context context)
c_parser_omp_declare_reduction (parser, context);
return;
}
+ if (!flag_openmp) /* flag_openmp_simd */
+ {
+ c_parser_skip_to_pragma_eol (parser);
+ return;
+ }
if (strcmp (p, "target") == 0)
{
c_parser_consume_token (parser);