From 6d7f7e0a635298c307d51d3eb166905b5bcaf07a Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Tue, 5 Nov 2013 08:29:47 +0100 Subject: invoke.texi (-fopenmp-simd): Document new option. 2013-11-05 Tobias Burnus 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 --- gcc/c/ChangeLog | 7 ++++++ gcc/c/c-parser.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 66 insertions(+), 12 deletions(-) (limited to 'gcc/c') 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 + + * 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 * 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); -- cgit v1.1