On Fri, Nov 08, 2019 at 04:41:23PM +0100, Tobias Burnus wrote:
> With DECL_ARTIFICIAL added and also_value replaced:
> Build on x86-64-gnu-linux. OK once regtested?

Almost.

> -         gimplify_assign (x, var, &ilist);
> +         if (do_optional_check && omp_check_optional_argument (ovar, true))
 
Do you need true here when just testing for non-NULL?
If yes, it would be better to call it just once, so that e.g. the
DECL_ARGUMENTS list is not walked twice.  So perhaps:

            tree present;
            present = (do_optional_check
                       ? omp_check_optional_argument (ovar, true) : NULL_TREE);
            if (present)
              {

> +           {
> +             tree null_label = create_artificial_label (UNKNOWN_LOCATION);
> +             tree notnull_label = create_artificial_label (UNKNOWN_LOCATION);
> +             tree opt_arg_label = create_artificial_label (UNKNOWN_LOCATION);

I this this is already too long, so needs line wrapping before =.

> +             tree new_x = unshare_expr (x);
> +             tree present = omp_check_optional_argument (ovar, true);

And not call it here again.

> +             gimplify_expr (&present, &ilist, NULL, is_gimple_val,
> +                            fb_rvalue);
> +             gcond *cond = gimple_build_cond_from_tree (present,
> +                                                        notnull_label,
> +                                                        null_label);
> +             gimple_seq_add_stmt (&ilist, cond);
> +             gimple_seq_add_stmt (&ilist, gimple_build_label (null_label));
> +             gimplify_assign (new_x, null_pointer_node, &ilist);
> +             gimple_seq_add_stmt (&ilist, gimple_build_goto (opt_arg_label));

And here similarly.

> +         if (do_optional_check
> +             && omp_check_optional_argument (OMP_CLAUSE_DECL (c), true))
> +           {
> +             tree null_label = create_artificial_label (UNKNOWN_LOCATION);
> +             tree notnull_label = create_artificial_label (UNKNOWN_LOCATION);
> +             tree opt_arg_label = create_artificial_label (UNKNOWN_LOCATION);
> +             glabel *null_glabel = gimple_build_label (null_label);
> +             glabel *notnull_glabel = gimple_build_label (notnull_label);
> +             ggoto *opt_arg_ggoto = gimple_build_goto (opt_arg_label);
> +             gimplify_expr (&x, &new_body, NULL, is_gimple_val,
> +                                        fb_rvalue);
> +             tree present = omp_check_optional_argument (OMP_CLAUSE_DECL (c),
> +                                                         true);

Similarly to the above.

Otherwise LGTM.

        Jakub

Reply via email to