diff options
author | Jeff Law <law@redhat.com> | 2016-01-25 12:19:09 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2016-01-25 12:19:09 -0700 |
commit | 2c89b952c7f02379c087e67998efc85d69310014 (patch) | |
tree | 39cff29e36960823dc612da3db132b0db43ab126 /gcc/tree-ssa-threadupdate.h | |
parent | 2944621e2c2dd73c3162eb052d9250ea4e15fda6 (diff) | |
download | gcc-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.h | 13 |
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 |