aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-flow.h
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2006-01-19 01:42:48 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2006-01-19 01:42:48 +0000
commitd16a5e36692853e74ed97c362b41fdca8d69752e (patch)
tree1bea89da9c401e1b8e235d514d1d027b81c0eece /gcc/tree-flow.h
parentc8db7d5c17414a130f023cf25b3fe12f6842599b (diff)
downloadgcc-d16a5e36692853e74ed97c362b41fdca8d69752e.zip
gcc-d16a5e36692853e74ed97c362b41fdca8d69752e.tar.gz
gcc-d16a5e36692853e74ed97c362b41fdca8d69752e.tar.bz2
tree-ssa-operands.h (ssa_call_clobbered_cache_valid): Remove.
2006-01-16 Daniel Berlin <dberlin@dberlin.org> * tree-ssa-operands.h (ssa_call_clobbered_cache_valid): Remove. (ssa_ro_call_cache_valid): Ditto. * tree-ssa-alias.c (sort_tags_by_id): New function. (init_transitive_clobber_worklist): Ditto. (add_to_worklist): Ditto. (mark_aliases_call_clobbered): Ditto. (compute_tag_properties): Ditto. (set_initial_properties): Ditto. (compute_call_clobbered): Ditto. (compute_may_aliases): Call compute_call_clobbered and grouping. (compute_flow_sensitive_aliasing): Remove clobbering related code. (compute_flow_insensitive_aliasing): Grouping now happens in our caller. (setup_pointers_and_addressables): Remove clobbering related code. (add_may_alias): Ditto. (replace_may_alias): Ditto. (get_nmt_for): Ditto. (create_global_var): (is_escape_site): Return an escape_type enumeration. * tree-flow-inline.h (is_call_clobbered): Global var does not imply call clobbered. (mark_call_clobbered): Take a reason for marking this. Remove marking of globalness, and cache invalidation. (clear_call_clobbered): Remove cache invalidation code. * tree-dfa.c (dump_variable): If details is on, dump the reason for escaping. * tree-outof-ssa.c (create_temp): Copy escape mask from original variable. * tree-flow.h (struct ptr_info_def): Add escape mask member. (struct var_ann_d): Ditto. (enum escape_type): New. (mark_call_clobbered): Adjust prototype. * tree-ssa-structalias.c (update_alias_info): Unmodifiable vars are never call clobbered. Record reasons for escaping. * tree-ssa-structalias.h (is_escape_site): Update prototype. * tree-ssa-operands.c (ssa_call_clobbered_cache_valid): Remove. (ssa_ro_call_cache_valid): Ditto. (clobbered_v_may_defs): Ditto. (clobbered_vuses): Ditto. (ro_call_vuses): Ditto. (clobber_stats): New. (init_ssa_operands): Zero out clobber stats. (fini_ssa_operands): Print out clobber stats. (get_call_expr_operands): Pass callee fndecl to add_call_read_ops). (add_call_clobber_ops): Remove use of cache. Add use of PURE_CONST information. (add_call_read_ops): Remove use of cache. Add use of static not_read information. From-SVN: r109938
Diffstat (limited to 'gcc/tree-flow.h')
-rw-r--r--gcc/tree-flow.h27
1 files changed, 26 insertions, 1 deletions
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 92a6035..a766e39 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -92,6 +92,9 @@ struct ptr_info_def GTY(())
pointer will be represented by this memory tag, instead of the type
tag computed by TBAA. */
tree name_mem_tag;
+
+ /* Mask of reasons this pointer's value escapes the function */
+ unsigned int escape_mask;
};
@@ -213,6 +216,10 @@ struct var_ann_d GTY(())
/* If this variable is a structure, this fields holds a list of
symbols representing each of the fields of the structure. */
subvar_t subvars;
+
+ /* Mask of values saying the reasons why this variable has escaped
+ the function. */
+ unsigned int escape_mask;
};
struct function_ann_d GTY(())
@@ -751,9 +758,27 @@ enum move_pos
};
extern enum move_pos movement_possibility (tree);
+/* The reasons a variable may escape a function. */
+enum escape_type
+ {
+ NO_ESCAPE = 0, /* Doesn't escape. */
+ ESCAPE_STORED_IN_GLOBAL = 1 << 1,
+ ESCAPE_TO_ASM = 1 << 2, /* Passed by address to an assembly
+ statement. */
+ ESCAPE_TO_CALL = 1 << 3, /* Escapes to a function call. */
+ ESCAPE_BAD_CAST = 1 << 4, /* Cast from pointer to integer */
+ ESCAPE_TO_RETURN = 1 << 5, /* Returned from function. */
+ ESCAPE_TO_PURE_CONST = 1 << 6, /* Escapes to a pure or constant
+ function call. */
+ ESCAPE_IS_GLOBAL = 1 << 7, /* Is a global variable. */
+ ESCAPE_IS_PARM = 1 << 8, /* Is an incoming function parameter. */
+ ESCAPE_UNKNOWN = 1 << 9 /* We believe it escapes for some reason
+ not enumerated above. */
+ };
+
/* In tree-flow-inline.h */
static inline bool is_call_clobbered (tree);
-static inline void mark_call_clobbered (tree);
+static inline void mark_call_clobbered (tree, unsigned int);
static inline void set_is_used (tree);
static inline bool unmodifiable_var_p (tree);