00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TREE_FLOW_H
00023 #define _TREE_FLOW_H 1
00024
00025 #include "bitmap.h"
00026 #include "hard-reg-set.h"
00027 #include "basic-block.h"
00028 #include "hashtab.h"
00029 #include "tree-gimple.h"
00030 #include "tree-ssa-operands.h"
00031 #include "cgraph.h"
00032
00033
00034 #ifndef GCC_BASIC_BLOCK_H
00035 struct edge_def;
00036 typedef struct edge_def *edge;
00037 struct basic_block_def;
00038 typedef struct basic_block_def *basic_block;
00039 #endif
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 struct ptr_info_def GTY(())
00052 {
00053
00054
00055 unsigned int pt_anything : 1;
00056
00057
00058 unsigned int pt_malloc : 1;
00059
00060
00061 unsigned int value_escapes_p : 1;
00062
00063
00064 unsigned int is_dereferenced : 1;
00065
00066
00067 unsigned int pt_global_mem : 1;
00068
00069
00070 unsigned int pt_null : 1;
00071
00072
00073 bitmap pt_vars;
00074
00075
00076
00077
00078
00079 tree name_mem_tag;
00080 };
00081
00082
00083
00084
00085
00086 enum tree_ann_type { TREE_ANN_COMMON, VAR_ANN, STMT_ANN };
00087
00088 struct tree_ann_common_d GTY(())
00089 {
00090
00091 enum tree_ann_type type;
00092
00093
00094
00095 PTR GTY ((skip (""))) aux;
00096
00097
00098 tree GTY((skip)) value_handle;
00099 };
00100
00101
00102
00103
00104
00105 enum need_phi_state {
00106
00107
00108
00109 NEED_PHI_STATE_UNKNOWN,
00110
00111
00112
00113
00114
00115
00116 NEED_PHI_STATE_NO,
00117
00118
00119
00120
00121
00122 NEED_PHI_STATE_MAYBE
00123 };
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 enum mem_tag_kind {
00134
00135 NOT_A_TAG,
00136
00137
00138 TYPE_TAG,
00139
00140
00141 NAME_TAG
00142 };
00143
00144 struct var_ann_d GTY(())
00145 {
00146 struct tree_ann_common_d common;
00147
00148
00149
00150 unsigned out_of_ssa_tag : 1;
00151
00152
00153 unsigned root_var_processed : 1;
00154
00155
00156 ENUM_BITFIELD (mem_tag_kind) mem_tag_kind : 2;
00157
00158
00159
00160
00161 unsigned is_alias_tag : 1;
00162
00163
00164
00165 unsigned used : 1;
00166
00167
00168
00169
00170 ENUM_BITFIELD (need_phi_state) need_phi_state : 2;
00171
00172
00173
00174 unsigned in_vuse_list : 1;
00175
00176
00177
00178 unsigned in_v_may_def_list : 1;
00179
00180
00181
00182
00183
00184 tree type_mem_tag;
00185
00186
00187 varray_type may_aliases;
00188
00189
00190 size_t uid;
00191
00192
00193
00194 unsigned partition;
00195
00196
00197 unsigned root_index;
00198
00199
00200
00201
00202
00203 tree default_def;
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213 tree current_def;
00214 };
00215
00216
00217 struct dataflow_d GTY(())
00218 {
00219
00220
00221
00222 varray_type immediate_uses;
00223
00224
00225 tree uses[2];
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 };
00251
00252 typedef struct dataflow_d *dataflow_t;
00253
00254
00255 struct stmt_ann_d GTY(())
00256 {
00257 struct tree_ann_common_d common;
00258
00259
00260
00261 unsigned modified : 1;
00262
00263
00264 unsigned makes_aliased_loads : 1;
00265
00266
00267 unsigned makes_aliased_stores : 1;
00268
00269
00270 unsigned has_volatile_ops : 1;
00271
00272
00273
00274 unsigned makes_clobbering_call : 1;
00275
00276
00277 basic_block GTY ((skip (""))) bb;
00278
00279 struct stmt_operands_d operands;
00280
00281
00282 dataflow_t df;
00283
00284
00285 bitmap addresses_taken;
00286
00287
00288
00289
00290 unsigned int uid;
00291 };
00292
00293 union tree_ann_d GTY((desc ("ann_type ((tree_ann_t)&%h)")))
00294 {
00295 struct tree_ann_common_d GTY((tag ("TREE_ANN_COMMON"))) common;
00296 struct var_ann_d GTY((tag ("VAR_ANN"))) decl;
00297 struct stmt_ann_d GTY((tag ("STMT_ANN"))) stmt;
00298 };
00299
00300 extern GTY(()) VEC(tree) *modified_noreturn_calls;
00301
00302 typedef union tree_ann_d *tree_ann_t;
00303 typedef struct var_ann_d *var_ann_t;
00304 typedef struct stmt_ann_d *stmt_ann_t;
00305
00306 static inline tree_ann_t tree_ann (tree);
00307 static inline tree_ann_t get_tree_ann (tree);
00308 static inline var_ann_t var_ann (tree);
00309 static inline var_ann_t get_var_ann (tree);
00310 static inline stmt_ann_t stmt_ann (tree);
00311 static inline stmt_ann_t get_stmt_ann (tree);
00312 static inline enum tree_ann_type ann_type (tree_ann_t);
00313 static inline basic_block bb_for_stmt (tree);
00314 extern void set_bb_for_stmt (tree, basic_block);
00315 static inline bool noreturn_call_p (tree);
00316 static inline void modify_stmt (tree);
00317 static inline void unmodify_stmt (tree);
00318 static inline bool stmt_modified_p (tree);
00319 static inline varray_type may_aliases (tree);
00320 static inline int get_lineno (tree);
00321 static inline const char *get_filename (tree);
00322 static inline bool is_exec_stmt (tree);
00323 static inline bool is_label_stmt (tree);
00324 static inline v_may_def_optype get_v_may_def_ops (stmt_ann_t);
00325 static inline vuse_optype get_vuse_ops (stmt_ann_t);
00326 static inline use_optype get_use_ops (stmt_ann_t);
00327 static inline def_optype get_def_ops (stmt_ann_t);
00328 static inline bitmap addresses_taken (tree);
00329 static inline int num_immediate_uses (dataflow_t);
00330 static inline tree immediate_use (dataflow_t, int);
00331 static inline dataflow_t get_immediate_uses (tree);
00332 static inline void set_default_def (tree, tree);
00333 static inline tree default_def (tree);
00334
00335 /*---------------------------------------------------------------------------
00336 Structure representing predictions in tree level.
00337 ---------------------------------------------------------------------------*/
00338 struct edge_prediction GTY((chain_next ("%h.next")))
00339 {
00340 struct edge_prediction *next;
00341 edge edge;
00342 enum br_predictor predictor;
00343 int probability;
00344 };
00345
00346 /*---------------------------------------------------------------------------
00347 Block annotations stored in basic_block.tree_annotations
00348 ---------------------------------------------------------------------------*/
00349 struct bb_ann_d GTY(())
00350 {
00351 /* Chain of PHI nodes for this block. */
00352 tree phi_nodes;
00353
00354 /* Nonzero if this block contains an escape point (see is_escape_site). */
00355 unsigned has_escape_site : 1;
00356
00357 /* Nonzero if one or more incoming edges to this block should be threaded
00358 to an outgoing edge of this block. */
00359 unsigned incoming_edge_threaded : 1;
00360
00361 struct edge_prediction *predictions;
00362 };
00363
00364 typedef struct bb_ann_d *bb_ann_t;
00365
00366 /* Accessors for basic block annotations. */
00367 static inline bb_ann_t bb_ann (basic_block);
00368 static inline tree phi_nodes (basic_block);
00369 static inline void set_phi_nodes (basic_block, tree);
00370
00371 /*---------------------------------------------------------------------------
00372 Global declarations
00373 ---------------------------------------------------------------------------*/
00374 /* Array of all variables referenced in the function. */
00375 extern GTY(()) varray_type referenced_vars;
00376
00377 #define num_referenced_vars VARRAY_ACTIVE_SIZE (referenced_vars)
00378 #define referenced_var(i) VARRAY_TREE (referenced_vars, i)
00379
00380 /* Array of all SSA_NAMEs used in the function. */
00381 extern GTY(()) varray_type ssa_names;
00382
00383 #define num_ssa_names VARRAY_ACTIVE_SIZE (ssa_names)
00384 #define ssa_name(i) VARRAY_TREE (ssa_names, i)
00385
00386 /* Artificial variable used to model the effects of function calls. */
00387 extern GTY(()) tree global_var;
00388
00389 /* Call clobbered variables in the function. If bit I is set, then
00390 REFERENCED_VARS (I) is call-clobbered. */
00391 extern bitmap call_clobbered_vars;
00392
00393 /* Addressable variables in the function. If bit I is set, then
00394 REFERENCED_VARS (I) has had its address taken. */
00395 extern bitmap addressable_vars;
00396
00397 /* 'true' after aliases have been computed (see compute_may_aliases). */
00398 extern bool aliases_computed_p;
00399
00400 /* Macros for showing usage statistics. */
00401 #define SCALE(x) ((unsigned long) ((x) < 1024*10 \
00402 ? (x) \
00403 : ((x) < 1024*1024*10 \
00404 ? (x) / 1024 \
00405 : (x) / (1024*1024))))
00406
00407 #define LABEL(x) ((x) < 1024*10 ? 'b' : ((x) < 1024*1024*10 ? 'k' : 'M'))
00408
00409 #define PERCENT(x,y) ((float)(x) * 100.0 / (float)(y))
00410
00411
00412 /*---------------------------------------------------------------------------
00413 Block iterators
00414 ---------------------------------------------------------------------------*/
00415
00416 typedef struct {
00417 tree_stmt_iterator tsi;
00418 basic_block bb;
00419 } block_stmt_iterator;
00420
00421 static inline block_stmt_iterator bsi_start (basic_block);
00422 static inline block_stmt_iterator bsi_last (basic_block);
00423 static inline block_stmt_iterator bsi_after_labels (basic_block);
00424 block_stmt_iterator bsi_for_stmt (tree);
00425 static inline bool bsi_end_p (block_stmt_iterator);
00426 static inline void bsi_next (block_stmt_iterator *);
00427 static inline void bsi_prev (block_stmt_iterator *);
00428 static inline tree bsi_stmt (block_stmt_iterator);
00429 static inline tree * bsi_stmt_ptr (block_stmt_iterator);
00430
00431 extern void bsi_remove (block_stmt_iterator *);
00432 extern void bsi_move_before (block_stmt_iterator *, block_stmt_iterator *);
00433 extern void bsi_move_after (block_stmt_iterator *, block_stmt_iterator *);
00434 extern void bsi_move_to_bb_end (block_stmt_iterator *, basic_block);
00435
00436 enum bsi_iterator_update
00437 {
00438 /* Note that these are intentionally in the same order as TSI_FOO. They
00439 mean exactly the same as their TSI_* counterparts. */
00440 BSI_NEW_STMT,
00441 BSI_SAME_STMT,
00442 BSI_CHAIN_START,
00443 BSI_CHAIN_END,
00444 BSI_CONTINUE_LINKING
00445 };
00446
00447 extern void bsi_insert_before (block_stmt_iterator *, tree,
00448 enum bsi_iterator_update);
00449 extern void bsi_insert_after (block_stmt_iterator *, tree,
00450 enum bsi_iterator_update);
00451
00452 extern void bsi_replace (const block_stmt_iterator *, tree, bool);
00453
00454 /*---------------------------------------------------------------------------
00455 Function prototypes
00456 ---------------------------------------------------------------------------*/
00457 /* In tree-cfg.c */
00458
00459 /* Location to track pending stmt for edge insertion. */
00460 #define PENDING_STMT(e) ((e)->insns.t)
00461
00462 extern void delete_tree_cfg_annotations (void);
00463 extern void disband_implicit_edges (void);
00464 extern bool stmt_ends_bb_p (tree);
00465 extern bool is_ctrl_stmt (tree);
00466 extern bool is_ctrl_altering_stmt (tree);
00467 extern bool computed_goto_p (tree);
00468 extern bool simple_goto_p (tree);
00469 extern void tree_dump_bb (basic_block, FILE *, int);
00470 extern void debug_tree_bb (basic_block);
00471 extern basic_block debug_tree_bb_n (int);
00472 extern void dump_tree_cfg (FILE *, int);
00473 extern void debug_tree_cfg (int);
00474 extern void dump_cfg_stats (FILE *);
00475 extern void debug_cfg_stats (void);
00476 extern void debug_loop_ir (void);
00477 extern void print_loop_ir (FILE *);
00478 extern void cleanup_dead_labels (void);
00479 extern void group_case_labels (void);
00480 extern bool cleanup_tree_cfg (void);
00481 extern tree first_stmt (basic_block);
00482 extern tree last_stmt (basic_block);
00483 extern tree *last_stmt_ptr (basic_block);
00484 extern tree last_and_only_stmt (basic_block);
00485 extern edge find_taken_edge (basic_block, tree);
00486 extern void cfg_remove_useless_stmts (void);
00487 extern basic_block label_to_block (tree);
00488 extern void bsi_insert_on_edge (edge, tree);
00489 extern basic_block bsi_insert_on_edge_immediate (edge, tree);
00490 extern void bsi_commit_one_edge_insert (edge, basic_block *);
00491 extern void bsi_commit_edge_inserts (void);
00492 extern void notice_special_calls (tree);
00493 extern void clear_special_calls (void);
00494 extern void verify_stmts (void);
00495 extern tree tree_block_label (basic_block);
00496 extern void extract_true_false_edges_from_block (basic_block, edge *, edge *);
00497 extern bool tree_duplicate_sese_region (edge, edge, basic_block *, unsigned,
00498 basic_block *);
00499 extern void add_phi_args_after_copy_bb (basic_block);
00500 extern void add_phi_args_after_copy (basic_block *, unsigned);
00501 extern void rewrite_to_new_ssa_names_bb (basic_block, struct htab *);
00502 extern void rewrite_to_new_ssa_names (basic_block *, unsigned, htab_t);
00503 extern void allocate_ssa_names (bitmap, struct htab **);
00504 extern bool tree_purge_dead_eh_edges (basic_block);
00505 extern bool tree_purge_all_dead_eh_edges (bitmap);
00506 extern tree gimplify_val (block_stmt_iterator *, tree, tree);
00507 extern tree gimplify_build1 (block_stmt_iterator *, enum tree_code,
00508 tree, tree);
00509 extern tree gimplify_build2 (block_stmt_iterator *, enum tree_code,
00510 tree, tree, tree);
00511 extern tree gimplify_build3 (block_stmt_iterator *, enum tree_code,
00512 tree, tree, tree, tree);
00513
00514 /* In tree-pretty-print.c. */
00515 extern void dump_generic_bb (FILE *, basic_block, int, int);
00516
00517 /* In tree-dfa.c */
00518 extern var_ann_t create_var_ann (tree);
00519 extern stmt_ann_t create_stmt_ann (tree);
00520 extern tree_ann_t create_tree_ann (tree);
00521 extern void reserve_phi_args_for_new_edge (basic_block);
00522 extern tree create_phi_node (tree, basic_block);
00523 extern void add_phi_arg (tree, tree, edge);
00524 extern void remove_phi_args (edge);
00525 extern void remove_phi_node (tree, tree, basic_block);
00526 extern void remove_all_phi_nodes_for (bitmap);
00527 extern tree phi_reverse (tree);
00528 extern void dump_dfa_stats (FILE *);
00529 extern void debug_dfa_stats (void);
00530 extern void debug_referenced_vars (void);
00531 extern void dump_referenced_vars (FILE *);
00532 extern void dump_variable (FILE *, tree);
00533 extern void debug_variable (tree);
00534 extern void dump_immediate_uses (FILE *);
00535 extern void debug_immediate_uses (void);
00536 extern void dump_immediate_uses_for (FILE *, tree);
00537 extern void debug_immediate_uses_for (tree);
00538 extern void compute_immediate_uses (int, bool (*)(tree));
00539 extern void free_df (void);
00540 extern void free_df_for_stmt (tree);
00541 extern tree get_virtual_var (tree);
00542 extern void add_referenced_tmp_var (tree);
00543 extern void mark_new_vars_to_rename (tree, bitmap);
00544 extern void find_new_referenced_vars (tree *);
00545 void mark_call_clobbered_vars_to_rename (void);
00546
00547 extern void redirect_immediate_uses (tree, tree);
00548 extern tree make_rename_temp (tree, const char *);
00549
00550 /* Flags used when computing reaching definitions and reached uses. */
00551 #define TDFA_USE_OPS (1 << 0)
00552 #define TDFA_USE_VOPS (1 << 1)
00553
00554 /* In gimple-low.c */
00555 struct lower_data;
00556 extern void lower_stmt_body (tree, struct lower_data *);
00557 extern void record_vars (tree);
00558 extern bool block_may_fallthru (tree block);
00559
00560 /* In tree-ssa-alias.c */
00561 extern void dump_may_aliases_for (FILE *, tree);
00562 extern void debug_may_aliases_for (tree);
00563 extern void dump_alias_info (FILE *);
00564 extern void debug_alias_info (void);
00565 extern void dump_points_to_info (FILE *);
00566 extern void debug_points_to_info (void);
00567 extern void dump_points_to_info_for (FILE *, tree);
00568 extern void debug_points_to_info_for (tree);
00569 extern bool may_be_aliased (tree);
00570 extern struct ptr_info_def *get_ptr_info (tree);
00571
00572 /* Call-back function for walk_use_def_chains(). At each reaching
00573 definition, a function with this prototype is called. */
00574 typedef bool (*walk_use_def_chains_fn) (tree, tree, void *);
00575
00576 typedef tree tree_on_heap;
00577 DEF_VEC_MALLOC_P (tree_on_heap);
00578
00579 /* In tree-ssa.c */
00580 extern void init_tree_ssa (void);
00581 extern void dump_tree_ssa (FILE *);
00582 extern void debug_tree_ssa (void);
00583 extern void debug_def_blocks (void);
00584 extern void dump_tree_ssa_stats (FILE *);
00585 extern void debug_tree_ssa_stats (void);
00586 extern edge ssa_redirect_edge (edge, basic_block);
00587 extern void flush_pending_stmts (edge);
00588 extern bool tree_ssa_useless_type_conversion (tree);
00589 extern bool tree_ssa_useless_type_conversion_1 (tree, tree);
00590 extern void verify_ssa (void);
00591 extern void delete_tree_ssa (void);
00592 extern void register_new_def (tree, VEC (tree_on_heap) **);
00593 extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool);
00594 extern void kill_redundant_phi_nodes (void);
00595 extern bool stmt_references_memory_p (tree);
00596
00597 /* In tree-into-ssa.c */
00598 extern void rewrite_into_ssa (bool);
00599 extern void rewrite_ssa_into_ssa (void);
00600 extern void rewrite_def_def_chains (void);
00601
00602 void compute_global_livein (bitmap, bitmap);
00603 tree duplicate_ssa_name (tree, tree);
00604
00605 /* In tree-ssa-ccp.c */
00606 bool fold_stmt (tree *);
00607 tree widen_bitfield (tree, tree, tree);
00608
00609 /* In tree-ssa-dom.c */
00610 extern void dump_dominator_optimization_stats (FILE *);
00611 extern void debug_dominator_optimization_stats (void);
00612
00613 /* In tree-ssa-copy.c */
00614 extern void propagate_value (use_operand_p, tree);
00615 extern void propagate_tree_value (tree *, tree);
00616 extern void replace_exp (use_operand_p, tree);
00617 extern bool may_propagate_copy (tree, tree);
00618 extern bool may_propagate_copy_into_asm (tree);
00619
00620 /* Description of number of iterations of a loop. All the expressions inside
00621 the structure can be evaluated at the end of the loop's preheader
00622 (and due to ssa form, also anywhere inside the body of the loop). */
00623
00624 struct tree_niter_desc
00625 {
00626 tree assumptions; /* The boolean expression. If this expression evaluates
00627 to false, then the other fields in this structure
00628 should not be used; there is no guarantee that they
00629 will be correct. */
00630 tree may_be_zero; /* The boolean expression. If it evaluates to true,
00631 the loop will exit in the first iteration (i.e.
00632 its latch will not be executed), even if the niter
00633 field says otherwise. */
00634 tree niter; /* The expression giving the number of iterations of
00635 a loop (provided that assumptions == true and
00636 may_be_zero == false), more precisely the number
00637 of executions of the latch of the loop. */
00638 tree additional_info; /* The boolean expression. Sometimes we use additional
00639 knowledge to simplify the other expressions
00640 contained in this structure (for example the
00641 knowledge about value ranges of operands on entry to
00642 the loop). If this is a case, conjunction of such
00643 condition is stored in this field, so that we do not
00644 lose the information: for example if may_be_zero
00645 is (n <= 0) and niter is (unsigned) n, we know
00646 that the number of iterations is at most
00647 MAX_SIGNED_INT. However if the (n <= 0) assumption
00648 is eliminated (by looking at the guard on entry of
00649 the loop), then the information would be lost. */
00650 };
00651
00652 /* In tree-vectorizer.c */
00653 void vectorize_loops (struct loops *);
00654
00655 /* In tree-ssa-phiopt.c */
00656 bool empty_block_p (basic_block);
00657
00658 /* In tree-ssa-loop*.c */
00659
00660 void tree_ssa_lim (struct loops *);
00661 void tree_ssa_unswitch_loops (struct loops *);
00662 void canonicalize_induction_variables (struct loops *);
00663 void tree_unroll_loops_completely (struct loops *);
00664 void tree_ssa_iv_optimize (struct loops *);
00665
00666 void number_of_iterations_cond (tree, tree, tree, enum tree_code, tree, tree,
00667 struct tree_niter_desc *);
00668 bool number_of_iterations_exit (struct loop *, edge,
00669 struct tree_niter_desc *niter);
00670 tree find_loop_niter (struct loop *, edge *);
00671 tree loop_niter_by_eval (struct loop *, edge);
00672 tree find_loop_niter_by_eval (struct loop *, edge *);
00673 void estimate_numbers_of_iterations (struct loops *);
00674 tree can_count_iv_in_wider_type (struct loop *, tree, tree, tree, tree);
00675 void free_numbers_of_iterations_estimates (struct loops *);
00676 void rewrite_into_loop_closed_ssa (void);
00677 void verify_loop_closed_ssa (void);
00678 void loop_commit_inserts (void);
00679 bool for_each_index (tree *, bool (*) (tree, tree *, void *), void *);
00680 void create_iv (tree, tree, tree, struct loop *, block_stmt_iterator *, bool,
00681 tree *, tree *);
00682 void split_loop_exit_edge (edge);
00683 basic_block bsi_insert_on_edge_immediate_loop (edge, tree);
00684 void standard_iv_increment_position (struct loop *, block_stmt_iterator *,
00685 bool *);
00686 basic_block ip_end_pos (struct loop *);
00687 basic_block ip_normal_pos (struct loop *);
00688 bool tree_duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
00689 unsigned int, sbitmap,
00690 edge, edge *,
00691 unsigned int *, int);
00692 struct loop *tree_ssa_loop_version (struct loops *, struct loop *, tree,
00693 basic_block *);
00694
00695 /* In tree-ssa-loop-im.c */
00696 /* The possibilities of statement movement. */
00697
00698 enum move_pos
00699 {
00700 MOVE_IMPOSSIBLE, /* No movement -- side effect expression. */
00701 MOVE_PRESERVE_EXECUTION, /* Must not cause the non-executed statement
00702 become executed -- memory accesses, ... */
00703 MOVE_POSSIBLE /* Unlimited movement. */
00704 };
00705 extern enum move_pos movement_possibility (tree);
00706
00707 /* In tree-flow-inline.h */
00708 static inline bool is_call_clobbered (tree);
00709 static inline void mark_call_clobbered (tree);
00710 static inline void set_is_used (tree);
00711
00712 /* In tree-eh.c */
00713 extern void make_eh_edges (tree);
00714 extern bool tree_could_trap_p (tree);
00715 extern bool tree_could_throw_p (tree);
00716 extern bool tree_can_throw_internal (tree);
00717 extern bool tree_can_throw_external (tree);
00718 extern int lookup_stmt_eh_region (tree);
00719 extern void add_stmt_to_eh_region (tree, int);
00720 extern bool remove_stmt_from_eh_region (tree);
00721 extern bool maybe_clean_eh_stmt (tree);
00722
00723 /* In tree-ssa-pre.c */
00724 void add_to_value (tree, tree);
00725 void debug_value_expressions (tree);
00726 void print_value_expressions (FILE *, tree);
00727
00728
00729 /* In tree-vn.c */
00730 bool expressions_equal_p (tree, tree);
00731 tree get_value_handle (tree);
00732 hashval_t vn_compute (tree, hashval_t, vuse_optype);
00733 tree vn_lookup_or_add (tree, vuse_optype);
00734 void vn_add (tree, tree, vuse_optype);
00735 tree vn_lookup (tree, vuse_optype);
00736 void vn_init (void);
00737 void vn_delete (void);
00738
00739
00740 /* In tree-sra.c */
00741 void insert_edge_copies (tree, basic_block);
00742
00743 /* In tree-loop-linear.c */
00744 extern void linear_transform_loops (struct loops *);
00745
00746 /* In tree-ssa-loop-ivopts.c */
00747 extern bool expr_invariant_in_loop_p (struct loop *, tree);
00748 /* In gimplify.c */
00749
00750 tree force_gimple_operand (tree, tree *, bool, tree);
00751
00752 #include "tree-flow-inline.h"
00753
00754 #endif /* _TREE_FLOW_H */