This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 11/14/13 10:05, Jakub Jelinek wrote: [Balaji, see below for question.]
On Thu, Nov 14, 2013 at 09:49:41AM -0700, Aldy Hernandez wrote:+ case OMP_PARALLEL: + case OMP_TASK: + case OMP_FOR: + case OMP_SIMD: + case OMP_SECTIONS: + case OMP_SINGLE: + case OMP_SECTION: + case OMP_MASTER: + case OMP_ORDERED: + case OMP_CRITICAL: + case OMP_ATOMIC: + case OMP_ATOMIC_READ: + case OMP_ATOMIC_CAPTURE_OLD: + case OMP_ATOMIC_CAPTURE_NEW:This is only a subset of OpenMP statements. You are missing OMP_DISTRIBUTE, OMP_TARGET, OMP_TARGET_DATA, OMP_TEAMS, OMP_TARGET_UPDATE, OMP_TASKGROUP. Also, CALL_EXPRs to case BUILT_IN_GOMP_BARRIER: case BUILT_IN_GOMP_CANCEL: case BUILT_IN_GOMP_CANCELLATION_POINT: case BUILT_IN_GOMP_TASKYIELD: case BUILT_IN_GOMP_TASKWAIT: are OpenMP statements. For OpenMP we diagnose this later on, in check_omp_nesting_restrictions in omp-low.c, wouldn't it be better to handle it there too?
Woah, indeed. I removed all of this section in favor of the error in check_omp_nesting_restriction, and adjusted the testcase error accordingly.
+ error_at (EXPR_LOCATION (*tp), "OpenMP statements are not allowed " + "within loops annotated with #pragma simd"); + *valid = false; + *walk_subtrees = 0; + break; --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -1380,6 +1380,12 @@ init_pragma (void) omp_pragmas_simd[i].id, true, true); } + if (flag_enable_cilkplus && !flag_preprocess_only) + { + cpp_register_deferred_pragma (parse_in, NULL, "simd", + PRAGMA_CILK_SIMD, true, false); + }Unnecessary {}s (or do you expect further cilk+ pragmas?
I sincerely hope not :). Fixed.
@@ -11543,6 +11553,9 @@ c_parser_omp_for_loop (location_t loc, c_parser *parser, enum tree_code code, case LT_EXPR: case LE_EXPR: break; + case NE_EXPR: + if (code == CILK_SIMD) + break;Add /* FALLTHRU */ here?
Done.
default: /* Can't be cond = error_mark_node, because we want to preserve the location until c_finish_omp_for. */+ else if (c_kind == PRAGMA_CILK_CLAUSE_REDUCTION) + /* Use the OMP 4.0 equivalent function. */ + clauses = cp_parser_omp_clause_reduction (parser, clauses);I'm surprised here, does the Cilk+ reduction clause really want to grok OpenMP user defined reductions etc.?
Hmm, I doubt it. Balaji, OpenMP user defined reductions are not allowed for Cilk Plus, right?
If so, Jakub what do you suggest, disallowing parsing of user defined reductions in cp_parser_omp_clause_reduction() when some Cilk Plus flag, or did you have something else in mind?
How does this look (fixed all the above with the exception of user-defined reductions, as well as Joseph's suggestion)?
Aldy
Attachment:
curr
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |