diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-11-05 08:29:47 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-11-05 08:29:47 +0100 |
commit | 6d7f7e0a635298c307d51d3eb166905b5bcaf07a (patch) | |
tree | 789e5dc3cac9b9f008c01fc7464776cb40592969 /gcc/c | |
parent | 6310844b657ce0658c3d1061b56ffc88e7beaeb0 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 71 |
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); |