diff options
Diffstat (limited to 'gcc/cfgloop.h')
-rw-r--r-- | gcc/cfgloop.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 1b45a56..5de3f64 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -43,6 +43,20 @@ struct lpt_decision unsigned times; }; +/* The structure describing a bound on number of iterations of a loop. */ + +struct nb_iter_bound +{ + tree bound; /* The expression whose value is an upper bound on the + number of executions of anything after ... */ + tree at_stmt; /* ... this statement during one execution of loop. */ + tree additional; /* A conjunction of conditions the operands of BOUND + satisfy. The additional information about the value + of the bound may be derived from it. */ + struct nb_iter_bound *next; + /* The next bound in a list. */ +}; + /* Structure to hold information for each natural loop. */ struct loop { @@ -173,12 +187,22 @@ struct loop information in this field. */ tree nb_iterations; + /* An INTEGER_CST estimation of the number of iterations. NULL_TREE + if there is no estimation. */ + tree estimated_nb_iterations; + /* Upper bound on number of iterations of a loop. */ struct nb_iter_bound *bounds; /* If not NULL, loop has just single exit edge stored here (edges to the EXIT_BLOCK_PTR do not count. */ edge single_exit; + + /* True when the loop does not carry data dependences, and + consequently the iterations can be executed in any order. False + when the loop carries data dependences, or when the property is + not decidable. */ + bool parallel_p; }; /* Flags for state of loop structure. */ @@ -462,6 +486,7 @@ enum extern void unroll_and_peel_loops (struct loops *, int); extern void doloop_optimize_loops (struct loops *); extern void move_loop_invariants (struct loops *); +extern void record_estimate (struct loop *, tree, tree, tree); /* Old loop optimizer interface. */ |