summaryrefslogtreecommitdiff
path: root/gcc/cfg.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cfg.h')
-rw-r--r--gcc/cfg.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/cfg.h b/gcc/cfg.h
index 11935d10b84..a43a32c36a9 100644
--- a/gcc/cfg.h
+++ b/gcc/cfg.h
@@ -20,6 +20,58 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_CFG_H
#define GCC_CFG_H
+/* What sort of profiling information we have. */
+enum profile_status_d
+{
+ PROFILE_ABSENT,
+ PROFILE_GUESSED,
+ PROFILE_READ,
+ PROFILE_LAST /* Last value, used by profile streaming. */
+};
+
+/* A structure to group all the per-function control flow graph data.
+ The x_* prefixing is necessary because otherwise references to the
+ fields of this struct are interpreted as the defines for backward
+ source compatibility following the definition of this struct. */
+struct GTY(()) control_flow_graph {
+ /* Block pointers for the exit and entry of a function.
+ These are always the head and tail of the basic block list. */
+ basic_block x_entry_block_ptr;
+ basic_block x_exit_block_ptr;
+
+ /* Index by basic block number, get basic block struct info. */
+ vec<basic_block, va_gc> *x_basic_block_info;
+
+ /* Number of basic blocks in this flow graph. */
+ int x_n_basic_blocks;
+
+ /* Number of edges in this flow graph. */
+ int x_n_edges;
+
+ /* The first free basic block number. */
+ int x_last_basic_block;
+
+ /* UIDs for LABEL_DECLs. */
+ int last_label_uid;
+
+ /* Mapping of labels to their associated blocks. At present
+ only used for the gimple CFG. */
+ vec<basic_block, va_gc> *x_label_to_block_map;
+
+ enum profile_status_d x_profile_status;
+
+ /* Whether the dominators and the postdominators are available. */
+ enum dom_state x_dom_computed[2];
+
+ /* Number of basic blocks in the dominance tree. */
+ unsigned x_n_bbs_in_dom_tree[2];
+
+ /* Maximal number of entities in the single jumptable. Used to estimate
+ final flowgraph size. */
+ int max_jumptable_ents;
+};
+
+
extern void init_flow (struct function *);
extern void clear_edges (void);
extern basic_block alloc_block (void);