X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-flow.h;h=2b044b8b9438c9544b70e2d315dd463c8c10921e;hb=fc2abfd309eaa3bcc23a9349d870f90ab4818901;hp=992f08a71c4edda585ed0612ae77347fac446e20;hpb=046bfc77364f8647fa26398c54a063d9d7f93022;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 992f08a71c4..2b044b8b943 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -38,6 +38,9 @@ struct basic_block_def; typedef struct basic_block_def *basic_block; #endif +/* True if the code is in ssa form. */ +extern bool in_ssa_p; + /*--------------------------------------------------------------------------- Attributes for SSA_NAMEs. @@ -80,34 +83,6 @@ struct ptr_info_def GTY(()) }; -/* Types of value ranges. */ -enum value_range_type { VR_UNDEFINED, VR_RANGE, VR_ANTI_RANGE, VR_VARYING }; - - -/* Ranges of values that can be associated with an SSA_NAME after VRP - has executed. */ -struct value_range_def GTY(()) -{ - /* Lattice value represented by this range. */ - enum value_range_type type; - - /* Minimum and maximum values represented by this range. These - values are _CST nodes that should be interpreted as follows: - - - If TYPE == VR_UNDEFINED then MIN and MAX must be NULL. - - - If TYPE == VR_RANGE then MIN holds the minimum value and - MAX holds the maximum value of the range [MIN, MAX]. - - - If TYPE == ANTI_RANGE the variable is known to NOT - take any values in the range [MIN, MAX]. */ - tree min; - tree max; -}; - -typedef struct value_range_def value_range; - - /*--------------------------------------------------------------------------- Tree annotations stored in tree_common.ann ---------------------------------------------------------------------------*/ @@ -118,10 +93,6 @@ struct tree_ann_common_d GTY(()) /* Annotation type. */ enum tree_ann_type type; - /* Auxiliary info specific to a pass. At all times, this - should either point to valid data or be NULL. */ - PTR GTY ((skip (""))) aux; - /* The value handle for this expression. Used by GVN-PRE. */ tree GTY((skip)) value_handle; }; @@ -250,24 +221,20 @@ struct var_ann_d GTY(()) tree default_def; /* During into-ssa and the dominator optimizer, this field holds the - current version of this variable (an SSA_NAME). - - This was previously two varrays (one in into-ssa the other in the - dominator optimizer). That is wasteful, particularly since the - dominator optimizer calls into-ssa resulting in having two varrays - live at the same time and this can happen for each call to the - dominator optimizer. */ + current version of this variable (an SSA_NAME). */ tree current_def; + /* If this variable is a structure, this fields holds a list of + symbols representing each of the fields of the structure. */ subvar_t subvars; }; typedef struct immediate_use_iterator_d { - ssa_imm_use_t *imm_use; - ssa_imm_use_t *end_p; - ssa_imm_use_t iter_node; + ssa_use_operand_t *imm_use; + ssa_use_operand_t *end_p; + ssa_use_operand_t iter_node; } imm_use_iterator; @@ -313,10 +280,10 @@ struct stmt_ann_d GTY(()) unsigned makes_clobbering_call : 1; /* Basic block that contains this statement. */ - basic_block GTY ((skip (""))) bb; + basic_block bb; /* Operand cache for stmt. */ - struct stmt_operands_d operands; + struct stmt_operands_d GTY ((skip (""))) operands; /* Set of variables that have had their address taken in the statement. */ bitmap addresses_taken; @@ -326,6 +293,10 @@ struct stmt_ann_d GTY(()) pass which needs statement UIDs. */ unsigned int uid; + /* Auxiliary info specific to a pass. At all times, this + should either point to valid data or be NULL. */ + PTR GTY ((skip (""))) aux; + /* Linked list of histograms for value-based profiling. This is really a struct histogram_value*. We use void* to avoid having to export that everywhere, and to avoid having to put it in GC memory. */ @@ -363,10 +334,6 @@ static inline int get_lineno (tree); static inline const char *get_filename (tree); static inline bool is_exec_stmt (tree); static inline bool is_label_stmt (tree); -static inline v_may_def_optype get_v_may_def_ops (stmt_ann_t); -static inline vuse_optype get_vuse_ops (stmt_ann_t); -static inline use_optype get_use_ops (stmt_ann_t); -static inline def_optype get_def_ops (stmt_ann_t); static inline bitmap addresses_taken (tree); static inline void set_default_def (tree, tree); static inline tree default_def (tree); @@ -382,28 +349,7 @@ struct edge_prediction GTY((chain_next ("%h.next"))) int probability; }; -/*--------------------------------------------------------------------------- - Block annotations stored in basic_block.tree_annotations ----------------------------------------------------------------------------*/ -struct bb_ann_d GTY(()) -{ - /* Chain of PHI nodes for this block. */ - tree phi_nodes; - - /* Nonzero if this block contains an escape point (see is_escape_site). */ - unsigned has_escape_site : 1; - - /* Nonzero if one or more incoming edges to this block should be threaded - to an outgoing edge of this block. */ - unsigned incoming_edge_threaded : 1; - - struct edge_prediction *predictions; -}; - -typedef struct bb_ann_d *bb_ann_t; - /* Accessors for basic block annotations. */ -static inline bb_ann_t bb_ann (basic_block); static inline tree phi_nodes (basic_block); static inline void set_phi_nodes (basic_block, tree); @@ -411,16 +357,16 @@ static inline void set_phi_nodes (basic_block, tree); Global declarations ---------------------------------------------------------------------------*/ /* Array of all variables referenced in the function. */ -extern GTY(()) varray_type referenced_vars; +extern GTY(()) VEC(tree,gc) *referenced_vars; -#define num_referenced_vars VARRAY_ACTIVE_SIZE (referenced_vars) -#define referenced_var(i) VARRAY_TREE (referenced_vars, i) +#define num_referenced_vars VEC_length (tree, referenced_vars) +#define referenced_var(i) VEC_index (tree, referenced_vars, i) /* Array of all SSA_NAMEs used in the function. */ -extern GTY(()) varray_type ssa_names; +extern GTY(()) VEC(tree,gc) *ssa_names; -#define num_ssa_names VARRAY_ACTIVE_SIZE (ssa_names) -#define ssa_name(i) VARRAY_TREE (ssa_names, i) +#define num_ssa_names (VEC_length (tree, ssa_names)) +#define ssa_name(i) (VEC_index (tree, ssa_names, (i))) /* Artificial variable used to model the effects of function calls. */ extern GTY(()) tree global_var; @@ -515,8 +461,6 @@ extern void debug_loop_ir (void); extern void print_loop_ir (FILE *); extern void cleanup_dead_labels (void); extern void group_case_labels (void); -extern bool cleanup_tree_cfg (void); -extern void cleanup_tree_cfg_loop (void); extern tree first_stmt (basic_block); extern tree last_stmt (basic_block); extern tree *last_stmt_ptr (basic_block); @@ -537,9 +481,6 @@ extern bool tree_duplicate_sese_region (edge, edge, basic_block *, unsigned, basic_block *); extern void add_phi_args_after_copy_bb (basic_block); extern void add_phi_args_after_copy (basic_block *, unsigned); -extern void rewrite_to_new_ssa_names_bb (basic_block, struct htab *); -extern void rewrite_to_new_ssa_names (basic_block *, unsigned, htab_t); -extern void allocate_ssa_names (bitmap, struct htab **); extern bool tree_purge_dead_eh_edges (basic_block); extern bool tree_purge_all_dead_eh_edges (bitmap); extern tree gimplify_val (block_stmt_iterator *, tree, tree); @@ -549,6 +490,15 @@ extern tree gimplify_build2 (block_stmt_iterator *, enum tree_code, tree, tree, tree); extern tree gimplify_build3 (block_stmt_iterator *, enum tree_code, tree, tree, tree, tree); +extern void init_empty_tree_cfg (void); +extern void fold_cond_expr_cond (void); +extern void replace_uses_by (tree, tree); +extern void start_recording_case_labels (void); +extern void end_recording_case_labels (void); + +/* In tree-cfgcleanup.c */ +extern bool cleanup_tree_cfg (void); +extern void cleanup_tree_cfg_loop (void); /* In tree-pretty-print.c. */ extern void dump_generic_bb (FILE *, basic_block, int, int); @@ -562,7 +512,6 @@ extern tree create_phi_node (tree, basic_block); extern void add_phi_arg (tree, tree, edge); extern void remove_phi_args (edge); extern void remove_phi_node (tree, tree); -extern tree find_phi_node_for (basic_block, tree, tree *); extern tree phi_reverse (tree); extern void dump_dfa_stats (FILE *); extern void debug_dfa_stats (void); @@ -593,6 +542,7 @@ extern void debug_points_to_info_for (tree); extern bool may_be_aliased (tree); extern struct ptr_info_def *get_ptr_info (tree); extern void add_type_alias (tree, tree); +extern void new_type_alias (tree, tree); extern void count_uses_and_derefs (tree, tree, unsigned *, unsigned *, bool *); static inline subvar_t get_subvars_for_var (tree); static inline bool ref_contains_array_ref (tree); @@ -609,11 +559,6 @@ typedef bool (*walk_use_def_chains_fn) (tree, tree, void *); /* In tree-ssa.c */ extern void init_tree_ssa (void); -extern void dump_tree_ssa (FILE *); -extern void debug_tree_ssa (void); -extern void debug_def_blocks (void); -extern void dump_tree_ssa_stats (FILE *); -extern void debug_tree_ssa_stats (void); extern edge ssa_redirect_edge (edge, basic_block); extern void flush_pending_stmts (edge); extern bool tree_ssa_useless_type_conversion (tree); @@ -625,35 +570,29 @@ extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool); extern bool stmt_references_memory_p (tree); /* In tree-into-ssa.c */ -extern void rewrite_ssa_into_ssa (void); - void update_ssa (unsigned); +void delete_update_ssa (void); void register_new_name_mapping (tree, tree); tree create_new_def_for (tree, tree, def_operand_p); bool need_ssa_update_p (void); bool name_registered_for_update_p (tree); bitmap ssa_names_to_replace (void); void release_ssa_name_after_update_ssa (tree name); -void dump_repl_tbl (FILE *); -void debug_repl_tbl (void); -void dump_names_replaced_by (FILE *, tree); -void debug_names_replaced_by (tree); void compute_global_livein (bitmap, bitmap); tree duplicate_ssa_name (tree, tree); void mark_sym_for_renaming (tree); void mark_set_for_renaming (bitmap); +tree get_current_def (tree); +void set_current_def (tree, tree); /* In tree-ssa-ccp.c */ bool fold_stmt (tree *); +bool fold_stmt_inplace (tree); tree widen_bitfield (tree, tree, tree); /* In tree-vrp.c */ -value_range *get_value_range (tree); -void dump_value_range (FILE *, value_range *); -void debug_value_range (value_range *); -void dump_all_value_ranges (FILE *); -void debug_all_value_ranges (void); bool expr_computes_nonzero (tree); +tree vrp_evaluate_conditional (tree, bool); /* In tree-ssa-dom.c */ extern void dump_dominator_optimization_stats (FILE *); @@ -710,7 +649,7 @@ bool empty_block_p (basic_block); void tree_ssa_lim (struct loops *); void tree_ssa_unswitch_loops (struct loops *); void canonicalize_induction_variables (struct loops *); -void tree_unroll_loops_completely (struct loops *); +void tree_unroll_loops_completely (struct loops *, bool); void tree_ssa_iv_optimize (struct loops *); bool number_of_iterations_exit (struct loop *, edge, @@ -721,7 +660,7 @@ tree find_loop_niter_by_eval (struct loop *, edge *); void estimate_numbers_of_iterations (struct loops *); tree can_count_iv_in_wider_type (struct loop *, tree, tree, tree, tree); void free_numbers_of_iterations_estimates (struct loops *); -void rewrite_into_loop_closed_ssa (bitmap); +void rewrite_into_loop_closed_ssa (bitmap, unsigned); void verify_loop_closed_ssa (void); void loop_commit_inserts (void); bool for_each_index (tree *, bool (*) (tree, tree *, void *), void *); @@ -739,6 +678,7 @@ bool tree_duplicate_loop_to_header_edge (struct loop *, edge, struct loops *, unsigned int *, int); struct loop *tree_ssa_loop_version (struct loops *, struct loop *, tree, basic_block *); +tree expand_simple_operations (tree); /* In tree-ssa-loop-im.c */ /* The possibilities of statement movement. */ @@ -767,7 +707,7 @@ extern bool tree_can_throw_external (tree); extern int lookup_stmt_eh_region (tree); extern void add_stmt_to_eh_region (tree, int); extern bool remove_stmt_from_eh_region (tree); -extern bool maybe_clean_eh_stmt (tree); +extern bool maybe_clean_or_replace_eh_stmt (tree, tree); /* In tree-ssa-pre.c */ void add_to_value (tree, tree); @@ -778,10 +718,10 @@ void print_value_expressions (FILE *, tree); /* In tree-vn.c */ bool expressions_equal_p (tree, tree); tree get_value_handle (tree); -hashval_t vn_compute (tree, hashval_t, vuse_optype); -tree vn_lookup_or_add (tree, vuse_optype); -void vn_add (tree, tree, vuse_optype); -tree vn_lookup (tree, vuse_optype); +hashval_t vn_compute (tree, hashval_t, tree); +tree vn_lookup_or_add (tree, tree); +void vn_add (tree, tree, tree); +tree vn_lookup (tree, tree); void vn_init (void); void vn_delete (void); @@ -796,9 +736,13 @@ extern void linear_transform_loops (struct loops *); /* In tree-ssa-loop-ivopts.c */ extern bool expr_invariant_in_loop_p (struct loop *, tree); -/* In gimplify.c */ +/* In tree-ssa-threadupdate.c. */ +extern bool thread_through_all_blocks (bitmap); + +/* In gimplify.c */ tree force_gimple_operand (tree, tree *, bool, tree); +tree force_gimple_operand_bsi (block_stmt_iterator *, tree, bool, tree); #include "tree-flow-inline.h"