Hi!
On Wed, Nov 04, 2015 at 09:55:49AM -0800, Cesar Philippidis wrote:
So, you are going to deal with gang parsing incrementally?
Fine with me.
> +/* OpenACC 2.0:
> + tile ( size-expr-list ) */
> +
> +static tree
> +c_parser_oacc_clause_tile (c_parser *parser, tree list)
> +{
> + tree c, expr = error_mark_node;
> + location_t loc, expr_loc;
> + tree tile = NULL_TREE;
> +
> + check_no_duplicate_clause (list, OMP_CLAUSE_TILE, "tile");
> +
> + loc = c_parser_peek_token (parser)->location;
> + if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
> + return list;
> +
> + vec<tree, va_gc> *tvec = make_tree_vector ();
Seems I've misread your patch, thought you are using TREE_VEC, while
you are actually using TREE_LIST, but populating it in a weird way.
I think more efficient would be just to
tree tile = NULL_TREE;
here, then:
> +
> + vec_safe_push (tvec, expr);
tile = tree_cons (NULL_TREE, expr, tile);
> + if (c_parser_next_token_is (parser, CPP_COMMA))
> + c_parser_consume_token (parser);
> + }
> + while (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN));
> +
> + /* Consume the trailing ')'. */
> + c_parser_consume_token (parser);
> +
> + c = build_omp_clause (loc, OMP_CLAUSE_TILE);
> + tile = build_tree_list_vec (tvec);
tile = nreverse (tile);
> + OMP_CLAUSE_TILE_LIST (c) = tile;
> + OMP_CLAUSE_CHAIN (c) = list;
> + release_tree_vector (tvec);
and remove the release_tree_vector calls.
> +static tree
> +cp_parser_oacc_clause_tile (cp_parser *parser, location_t clause_loc, tree
> list)
This is already too long line.
> + case OMP_CLAUSE_TILE:
> + {
> + tree list = OMP_CLAUSE_TILE_LIST (c);
> +
> + while (list)
I'd say
for (tree list = OMP_CLAUSE_TILE_LIST (c);
list; list = TREE_CHAIN (list))
would be more readable.
> --- a/gcc/gimplify.c
> +++ b/gcc/gimplify.c
> @@ -6995,9 +6995,18 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq
> *pre_p,
> remove = true;
> break;
>
> + case OMP_CLAUSE_TILE:
> + for (tree list = OMP_CLAUSE_TILE_LIST (c); !remove && list;
> + list = TREE_CHAIN (list))
> + {
> + if (gimplify_expr (&TREE_VALUE (list), pre_p, NULL,
> + is_gimple_val, fb_rvalue) == GS_ERROR)
> + remove = true;
> + }
After all, you are already using for here ;)
Otherwise LGTM, but please clear with Thomas, I think he had some issues
with the patch.
Jakub