On Mon, Nov 18, 2013 at 10:35:50PM +0000, Iyer, Balaji V wrote:
> Attached, please find a patch that will implement SIMD enabled functions
> for C targeting the gomp-4_0-branch. Here are the ChangeLog entries. Is
> this OK to install?
Have you tested say:
int func9 (int x, int y) __attribute__ ((vector (uniform (y), mask)));
? I mean, mostly you pass NULL to c_parser_attributes as the new argument,
but then dereference it unconditionally.
You should error out if a function has
#pragma omp declare simd
and
vector attribute, defining what it means doesn't make sense.
Also, I'm not sure I like doing the transformation from Cilk+ to OpenMP
syntax through rewriting tokens, rather than at the parsing level.
After all, the Cilk+ syntax is quite different, even when the patch pretends
it is the same, consider e.g. the linear clause, which in Cilk+ allows
to refer to an argument, in OpenMP doesn't.
Also, I wonder if you couldn't save the tokens wrapped into some tree
temporarily into the attribute, rather than having to adjust
c_parser_attribute callers. Joseph, what do you prefer here?
> @@ -1502,9 +1502,17 @@
> c_parser_peek_token (parser)->value = error_mark_node;
> fndef_ok = !nested;
> }
> + /* In Cilk Plus SIMD-enabled functions (formerly known as Elemental
> + Functions), attributes are used right above the functoin declaration or
> + the function itself. */
Spelling.
> + tree attrs = NULL_TREE;
> + if (flag_enable_cilkplus
> + && c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
> + attrs = c_parser_attributes (parser, &omp_declare_simd_clauses);
This looks wrong, parsing of the attributes is supposed to be done
in c_parser_declspecs and can be intermixed with various other tokens
(e.g. static, extern, etc.).
> c_parser_declspecs (parser, specs, true, true, start_attr_ok,
> true, true, cla_nonabstract_decl);
> + specs->attrs = chainon (attrs, specs->attrs);
> if (parser->error)
> {
> c_parser_skip_to_end_of_block_or_statement (parser);
> + /* Since we are converting an attribute to a pragma, we need to end the
> + attribute with PRAGMA_EOL. OpenMP guys would like to have 2 CPP_EOF
> + at the end, and so we insert that also. */
Comment wrongly indented. It isn't about me who likes to have there
2 CPP_EOF, but just a safety net, because normally C FE has two tokens
look-ahead.
Jakub