diff options
author | Richard Biener <rguenther@suse.de> | 2014-05-16 08:05:50 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-05-16 08:05:50 +0000 |
commit | a764d66099b476db7d59829da1b86fd4a701523f (patch) | |
tree | 6b4c7eeefda2e10dbce6363164cd1f14df8d78f7 /gcc/tree-inline.c | |
parent | a27c386001166cec7abc12d54e96413022bcc747 (diff) | |
download | gcc-a764d66099b476db7d59829da1b86fd4a701523f.zip gcc-a764d66099b476db7d59829da1b86fd4a701523f.tar.gz gcc-a764d66099b476db7d59829da1b86fd4a701523f.tar.bz2 |
tree-ssa-sccvn.c: Include tree-cfg.h and domwalk.h.
2014-05-16 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c: Include tree-cfg.h and domwalk.h.
(set_ssa_val_to): Handle unexpected sets to VN_TOP.
(visit_phi): Ignore edges marked as not executable.
(class cond_dom_walker): New.
(cond_dom_walker::before_dom_children): Value-number
control statements and mark successor edges as not
executable if possible.
(run_scc_vn): First walk all control statements in
dominator order, marking edges as not executable.
* tree-inline.c (copy_edges_for_bb): Be not confused
about random edge flags.
* gcc.dg/tree-ssa/ssa-fre-39.c: New testcase.
* gcc.dg/tree-ssa/ssa-fre-40.c: Likewise.
* gcc.dg/tree-ssa/ssa-pre-8.c: One more elimination.
* gcc.dg/tree-ssa/struct-aliasing-2.c: Scan cddce1 dump.
From-SVN: r210492
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 9207e9f..bc2b271 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1984,7 +1984,8 @@ copy_edges_for_bb (basic_block bb, gcov_type count_scale, basic_block ret_bb, flags = old_edge->flags; /* Return edges do get a FALLTHRU flag when the get inlined. */ - if (old_edge->dest->index == EXIT_BLOCK && !old_edge->flags + if (old_edge->dest->index == EXIT_BLOCK + && !(old_edge->flags & (EDGE_TRUE_VALUE|EDGE_FALSE_VALUE|EDGE_FAKE)) && old_edge->dest->aux != EXIT_BLOCK_PTR_FOR_FN (cfun)) flags |= EDGE_FALLTHRU; new_edge = make_edge (new_bb, (basic_block) old_edge->dest->aux, flags); |