diff options
author | Teresa Johnson <tejohnson@google.com> | 2013-10-18 14:36:53 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@gcc.gnu.org> | 2013-10-18 14:36:53 +0000 |
commit | adc7a8127ae13139fc1ea7ea375180f2b3a912ea (patch) | |
tree | 1251f3b4d2edb124429726444e94bce59d1e4080 /gcc | |
parent | 4db45577b797e63299dc362106bd4c562c5ea41b (diff) | |
download | gcc-adc7a8127ae13139fc1ea7ea375180f2b3a912ea.zip gcc-adc7a8127ae13139fc1ea7ea375180f2b3a912ea.tar.gz gcc-adc7a8127ae13139fc1ea7ea375180f2b3a912ea.tar.bz2 |
tree-ssa-tail-merge.c (replace_block_by): Update edge weights during merging.
2013-10-18 Teresa Johnson <tejohnson@google.com>
* tree-ssa-tail-merge.c (replace_block_by): Update edge
weights during merging.
From-SVN: r203823
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-tail-merge.c | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7129891..a677fa4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-18 Teresa Johnson <tejohnson@google.com> + + * tree-ssa-tail-merge.c (replace_block_by): Update edge + weights during merging. + 2013-10-18 Andrew MacLeod <amacleod@redhat.com> * tree-cfg.h: Rename from tree-flow.h. Remove #includes. diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index 4998b7e..9094935 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -1462,6 +1462,8 @@ static void replace_block_by (basic_block bb1, basic_block bb2) { edge pred_edge; + edge e1; + edge_iterator ei; unsigned int i; gimple bb2_phi; @@ -1494,6 +1496,18 @@ replace_block_by (basic_block bb1, basic_block bb2) bb2->count += bb1->count; + /* Merge the outgoing edge counts from bb1 onto bb2. */ + FOR_EACH_EDGE (e1, ei, bb1->succs) + { + edge e2; + e2 = find_edge (bb2, e1->dest); + gcc_assert (e2); + e2->count += e1->count; + /* Recompute the probability from the new merged edge count (bb2->count + was updated above). */ + e2->probability = GCOV_COMPUTE_SCALE (e2->count, bb2->count); + } + /* Do updates that use bb1, before deleting bb1. */ release_last_vdef (bb1); same_succ_flush_bb (bb1); |