Hi!
On Tue, Dec 17, 2013 at 05:23:43PM +0000, Iyer, Balaji V wrote:
> +/* Returns name of the next clause in Cilk Plus SIMD-enabled function's
> + attribute.
> + If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
> + the token is not consumed. Otherwise appropriate pragma_omp_clause is
> + returned and the token is consumed. */
> +
> +static pragma_omp_clause
> +c_parser_cilk_simd_fn_clause_name (c_parser *parser)
> +{
> + pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
> +
> + if (c_parser_next_token_is_not (parser, CPP_NAME))
> + return result;
> +
> + const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
> + if (!strcmp (p, "vectorlength"))
> + result = PRAGMA_CILK_CLAUSE_VECTORLENGTH;
> + else if (!strcmp (p, "uniform"))
> + result = PRAGMA_CILK_CLAUSE_UNIFORM;
> + else if (!strcmp (p, "linear"))
> + result = PRAGMA_CILK_CLAUSE_LINEAR;
> + else if (!strcmp (p, "mask"))
> + result = PRAGMA_CILK_CLAUSE_MASK;
> + else if (!strcmp (p, "nomask"))
> + result = PRAGMA_CILK_CLAUSE_UNMASK;
> +
> + if (result != PRAGMA_OMP_CLAUSE_NONE)
> + c_parser_consume_token (parser);
> + return result;
> +}
No, this isn't what I meant. I meant that you add the 3 new clause names
to c_parser_omp_clause_name (and use PRAGMA_CILK_* for those).
> + if (token->type == CPP_NAME
> + && TREE_CODE (token->value) == IDENTIFIER_NODE)
> + if (!strcmp (IDENTIFIER_POINTER (token->value), "vectorlength"))
> + {
> + if (!c_parser_cilk_clause_vectorlength (parser, NULL, true))
> + {
> + c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
> + return;
> + }
> + else
> + continue;
> + }
Why do you need this at all? I'd expect you just remove this whole if and
the c_parser_cilk_clause_vectorlength function, and instead just parse
vectorlength normally when you see PRAGMA_CILK_CLAUSE_VECTORLENGTH.
> + sorry ("using parameters for %<linear%> step is not supported "
> + "in this release");
... is not supported yet".
> - c_kind = c_parser_omp_clause_name (parser);
> +
> + if (mask == CILK_SIMD_FN_CLAUSE_MASK)
> + c_kind = c_parser_cilk_simd_fn_clause_name (parser);
> + else
> + c_kind = c_parser_omp_clause_name (parser);
Please revert this.
> @@ -10933,7 +11088,8 @@
> c_name = "aligned";
> break;
> case PRAGMA_OMP_CLAUSE_LINEAR:
> - clauses = c_parser_omp_clause_linear (parser, clauses);
> + clauses = c_parser_omp_clause_linear
> + (parser, clauses, mask == CILK_SIMD_FN_CLAUSE_MASK);
Please test for some particular bit in the mask, not == on the masks.
Jakub