aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-pass.h
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2007-05-17 10:10:24 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2007-05-17 08:10:24 +0000
commitb02b9b53ec39cfd36e27424c4c07be5880ec393a (patch)
tree7157094906e2791038cab066565c2c9b9c4e3104 /gcc/tree-pass.h
parentd2594859a6d1ea12ddde863721acbcb7fa645371 (diff)
downloadgcc-b02b9b53ec39cfd36e27424c4c07be5880ec393a.zip
gcc-b02b9b53ec39cfd36e27424c4c07be5880ec393a.tar.gz
gcc-b02b9b53ec39cfd36e27424c4c07be5880ec393a.tar.bz2
tree-vrp.c (finalize_jump_threads): Do not care about dominance info.
* tree-vrp.c (finalize_jump_threads): Do not care about dominance info. (execute_vrp): Preserve loops through jump threading. * tree-ssa-threadupdate.c (thread_single_edge, dbds_continue_enumeration_p, determine_bb_domination_status, thread_through_loop_header): New functions. (create_edge_and_update_destination_phis, create_edge_and_update_destination_phis): Set loops for the new blocks. (prune_undesirable_thread_requests): Removed. (redirect_edges): Do not pretend that redirect_edge_and_branch can create new blocks. (thread_block): Do not call prune_undesirable_thread_requests. Update loops. (mark_threaded_blocks): Select edges to thread here. (thread_through_all_blocks): Take may_peel_loop_headers argument. Thread edges through loop headers independently. * cfgloopmanip.c (create_preheader, mfb_keep_just): Export. * tree-pass.h (TODO_mark_first_instance): New. (first_pass_instance): Declare. * cfghooks.c (duplicate_block): Put the block to the original loop if copy is not specified. * tree-ssa-dom.c (tree_ssa_dominator_optimize): Preserve loops through jump threading. Pass may_peel_loop_headers to thread_through_all_blocks according to first_pass_instance. * cfgloop.h (create_preheader): Declare. * tree-flow.h (thread_through_all_blocks): Declaration changed. * basic-block.h (mfb_keep_just, mfb_kj_edge): Declare. * passes.c (first_pass_instance): New variable. (next_pass_1): Set TODO_mark_first_instance. (execute_todo): Set first_pass_instance. * gcc.dg/tree-ssa/ssa-dom-thread-2.c: New test. * gcc.dg/vect/vect-102.c, gcc.dg/vect/vect-103.c, gcc.dg/vect/vect-104.c: Use more complex construction to prevent vectorizing. * gcc.dg/tree-ssa/pr21559.c: Update outcome. From-SVN: r124786
Diffstat (limited to 'gcc/tree-pass.h')
-rw-r--r--gcc/tree-pass.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index b772435..299255c 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -218,6 +218,9 @@ struct dump_file_info
for the passes that are handed to register_dump_files. */
#define TODO_set_props (1 << 15)
+/* Internally used for the first instance of a pass. */
+#define TODO_mark_first_instance (1 << 16)
+
#define TODO_update_ssa_any \
(TODO_update_ssa \
| TODO_update_ssa_no_phi \
@@ -417,4 +420,13 @@ extern struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes;
extern void execute_pass_list (struct tree_opt_pass *);
extern void execute_ipa_pass_list (struct tree_opt_pass *);
+/* Set to true if the pass is called the first time during compilation of the
+ current function. Note that using this information in the optimization
+ passes is considered not to be clean, and it should be avoided if possible.
+ This flag is currently used to prevent loops from being peeled repeatedly
+ in jump threading; it will be removed once we preserve loop structures
+ throughout the compilation -- we will be able to mark the affected loops
+ directly in jump threading, and avoid peeling them next time. */
+extern bool first_pass_instance;
+
#endif /* GCC_TREE_PASS_H */