On Tue, Oct 08, 2013 at 10:51:29PM +0200, Tobias Burnus wrote:
> +       return false;
> +     }
> +      c_parser_for_statement (parser, true);
> +      return false;
> +
>      case PRAGMA_GCC_PCH_PREPROCESS:
>        c_parser_error (parser, "%<#pragma GCC pch_preprocess%> must be 
> first");
>        c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL);
> diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
> index f39b194..5979a4a 100644
> --- a/gcc/cfgloop.c
> +++ b/gcc/cfgloop.c
> @@ -507,6 +507,37 @@ flow_loops_find (struct loops *loops)
>             loop->latch = latch;
>           }
>       }
> +      /* Search for ANNOTATE call with annot_expr_ivdep_kind; if found, 
> remove
> +      it and set loop->safelen to INT_MAX.  We assume that the annotation
> +         comes immediately before the condition.  */

Mixing tabs with spaces above.

> +      if (loop->latch)
> +     FOR_EACH_EDGE (e, ei, loop->latch->succs)
> +       {
> +         if (e->dest->flags & BB_RTL)
> +           break;

I'd prefer Richard to review this (and probably Joseph the C FE part).
You can't really have loop->latch in GIMPLE and the successors
in RTL, so perhaps you can check that in the if (loop->latch) check
already.

> +         gimple_stmt_iterator gsi = gsi_last_nondebug_bb (e->dest);

GIMPLE_COND must be the last in the bb, can't be followed by
debug stmts, so you can safely use just gsi_last_bb (e->dest) instead.

> @@ -7378,6 +7388,22 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, 
> gimple_seq *post_p,
>         ret = gimplify_addr_expr (expr_p, pre_p, post_p);
>         break;
>  
> +     case ANNOTATE_EXPR:
> +       {
> +         tree cond = TREE_OPERAND (*expr_p, 0);
> +         tree id = build_int_cst (integer_type_node,
> +                                  ANNOTATE_EXPR_ID (*expr_p));
> +         tree tmp = create_tmp_var_raw (TREE_TYPE(cond), NULL);
> +         gimplify_arg (&cond, pre_p, EXPR_LOCATION (*expr_p));
> +         gimple call = gimple_build_call_internal (IFN_ANNOTATE, 2,
> +                                                   cond, id);
> +            gimple_call_set_lhs (call, tmp);
> +         gimplify_seq_add_stmt (pre_p, call);
> +            *expr_p = tmp;

Again, mixing tabs with spaces, tabs should be used always.

> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -591,6 +591,11 @@ extern void omp_clause_range_check_failed (const_tree, 
> const char *, int,
>  #define PREDICT_EXPR_PREDICTOR(NODE) \
>    ((enum br_predictor)tree_low_cst (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 
> 0), 0))
>  
> +#define ANNOTATE_EXPR_ID(NODE) \
> +  ((enum annot_expr_kind) ANNOTATE_EXPR_CHECK(NODE)->base.u.version)

Missing space between CHECK and (.

> +#define SET_ANNOTATE_EXPR_ID(NODE, ID) \
> +  (ANNOTATE_EXPR_CHECK(NODE)->base.u.version = ID)

Likewise.  Shouldn't it be = (ID) ?

        Jakub

Reply via email to