aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgloop.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cfgloop.h')
-rw-r--r--gcc/cfgloop.h25
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. */