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