aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-flow.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-flow.h')
-rw-r--r--gcc/tree-flow.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 2a54764..3bea04a 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -45,12 +45,14 @@ typedef struct basic_block_def *basic_block;
struct gimple_df GTY(()) {
/* Array of all variables referenced in the function. */
htab_t GTY((param_is (struct int_tree_map))) referenced_vars;
+
/* A list of all the noreturn calls passed to modify_stmt.
cleanup_control_flow uses it to detect cases where a mid-block
indirect call has been turned into a noreturn call. When this
happens, all the instructions after the call are no longer
reachable and must be deleted as dead. */
VEC(tree,gc) *modified_noreturn_calls;
+
/* Array of all SSA_NAMEs used in the function. */
VEC(tree,gc) *ssa_names;
@@ -234,23 +236,31 @@ struct var_ann_d GTY(())
ENUM_BITFIELD (need_phi_state) need_phi_state : 2;
/* Used during operand processing to determine if this variable is already
- in the vuse list. */
+ in the VUSE list. */
unsigned in_vuse_list : 1;
/* Used during operand processing to determine if this variable is already
- in the v_may_def list. */
- unsigned in_v_may_def_list : 1;
+ in the VDEF list. */
+ unsigned in_vdef_list : 1;
/* True for HEAP and PARM_NOALIAS artificial variables. */
unsigned is_heapvar : 1;
- /* An artificial variable representing the memory location pointed-to by
- all the pointer symbols that flow-insensitive alias analysis
- (mostly type-based) considers to be aliased. If the variable is
- not a pointer or if it is never dereferenced, this must be NULL. */
+ /* Memory partition tag assigned to this symbol. */
+ tree mpt;
+
+ /* If this variable is a pointer P that has been dereferenced, this
+ field is an artificial variable that represents the memory
+ location *P. Every other pointer Q that is type-compatible with
+ P will also have the same memory tag. If the variable is not a
+ pointer or if it is never dereferenced, this must be NULL.
+ FIXME, do we really need this here? How much slower would it be
+ to convert to hash table? */
tree symbol_mem_tag;
- /* Variables that may alias this variable. */
+ /* Variables that may alias this variable. This may only be set on
+ memory tags (NAME_MEMORY_TAG or TYPE_MEMORY_TAG). FIXME, move to
+ struct tree_memory_tag. */
VEC(tree, gc) *may_aliases;
/* Used when going out of SSA form to indicate which partition this
@@ -357,6 +367,10 @@ struct stmt_ann_d GTY(())
and local addressable variables. */
unsigned makes_clobbering_call : 1;
+ /* Nonzero if the statement references memory (at least one of its
+ expressions contains a non-register operand). */
+ unsigned references_memory : 1;
+
/* Basic block that contains this statement. */
basic_block bb;
@@ -719,6 +733,7 @@ static inline bool var_can_have_subvars (tree);
static inline bool overlap_subvar (unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT,
tree, bool *);
+extern tree create_tag_raw (enum tree_code, tree, const char *);
/* Call-back function for walk_use_def_chains(). At each reaching
definition, a function with this prototype is called. */