aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadupdate.h
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2016-01-25 12:19:09 -0700
committerJeff Law <law@gcc.gnu.org>2016-01-25 12:19:09 -0700
commit2c89b952c7f02379c087e67998efc85d69310014 (patch)
tree39cff29e36960823dc612da3db132b0db43ab126 /gcc/tree-ssa-threadupdate.h
parent2944621e2c2dd73c3162eb052d9250ea4e15fda6 (diff)
downloadgcc-2c89b952c7f02379c087e67998efc85d69310014.zip
gcc-2c89b952c7f02379c087e67998efc85d69310014.tar.gz
gcc-2c89b952c7f02379c087e67998efc85d69310014.tar.bz2
re PR tree-optimization/69196 (code size regression with jump threading at -O2)
PR tree-optimization/69196 PR tree-optimization/68398 * tree-ssa-threadupdate.h (enum bb_dom_status): Moved here from tree-ssa-threadupdate.c. (determine_bb_domination_status): Prototype * tree-ssa-threadupdate.c (enum bb_dom_status): Remove (determine_bb_domination_status): No longer static. (valid_jump_thread_path): Remove code to detect characteristics of the jump thread path not associated with correctness. * tree-ssa-threadbackward.c (fsm_find_control_statment_thread_paths): Correct test for thread path length. Count PHIs for real operands as statements that need to be copied. Do not count ASSERT_EXPRs. Look at all the blocks in the thread path. Compute and selectively filter thread paths based on threading through the latch, threading a multiway branch or crossing a multiway branch. PR tree-optimization/69196 PR tree-optimization/68398 * gcc.dg/tree-ssa/pr66752-3.c: Update expected output * gcc.dg/tree-ssa/pr68198.c: Likewise. From-SVN: r232802
Diffstat (limited to 'gcc/tree-ssa-threadupdate.h')
-rw-r--r--gcc/tree-ssa-threadupdate.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/tree-ssa-threadupdate.h b/gcc/tree-ssa-threadupdate.h
index 087f281..fbad9f6 100644
--- a/gcc/tree-ssa-threadupdate.h
+++ b/gcc/tree-ssa-threadupdate.h
@@ -47,4 +47,17 @@ extern void remove_jump_threads_including (edge);
extern void delete_jump_thread_path (vec <class jump_thread_edge *> *);
extern void remove_ctrl_stmt_and_useless_edges (basic_block, basic_block);
extern void free_dom_edge_info (edge);
+
+enum bb_dom_status
+{
+ /* BB does not dominate latch of the LOOP. */
+ DOMST_NONDOMINATING,
+ /* The LOOP is broken (there is no path from the header to its latch. */
+ DOMST_LOOP_BROKEN,
+ /* BB dominates the latch of the LOOP. */
+ DOMST_DOMINATING
+};
+
+enum bb_dom_status determine_bb_domination_status (struct loop *, basic_block);
+
#endif