diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-19 13:22:19 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-04-19 13:22:19 +0000 |
commit | 65f52ee9b978858ed791162f29a04f2cbcef6dbc (patch) | |
tree | c229c8622615d24353d0e083b34905437310e60f /gcc/tree-ssa-sccvn.c | |
parent | 27b95a65410ccb700752c8178fd19f1485a4b5bf (diff) | |
download | gcc-65f52ee9b978858ed791162f29a04f2cbcef6dbc.zip gcc-65f52ee9b978858ed791162f29a04f2cbcef6dbc.tar.gz gcc-65f52ee9b978858ed791162f29a04f2cbcef6dbc.tar.bz2 |
re PR tree-optimization/70724 (Miscompiles python3 with FDO)
2016-04-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/70724
* tree-ssa-sccvn.c (scc_vn_restore_ssa_info): Split SSA info
restoring out from ...
(free_scc_vn): ... here.
* tree-ssa-sccvn.h (scc_vn_restore_ssa_info): Declare.
* tres-ssa-pre.c (pass_pre::execute): Restore SSA info before
tail merging.
(pass_fre::execute): Restore SSA info.
* gcc.dg/torture/pr70724.c: New testcase.
From-SVN: r235203
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index e61e033..f6735dd 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -4306,26 +4306,19 @@ init_scc_vn (void) } } +/* Restore SSA info that has been reset on value leaders. */ + void -free_scc_vn (void) +scc_vn_restore_ssa_info (void) { - size_t i; - - delete constant_to_value_id; - constant_to_value_id = NULL; - BITMAP_FREE (constant_value_ids); - shared_lookup_phiargs.release (); - shared_lookup_references.release (); - XDELETEVEC (rpo_numbers); - - for (i = 0; i < num_ssa_names; i++) + for (unsigned i = 0; i < num_ssa_names; i++) { tree name = ssa_name (i); if (name && has_VN_INFO (name)) { if (VN_INFO (name)->needs_insertion) - release_ssa_name (name); + ; else if (POINTER_TYPE_P (TREE_TYPE (name)) && VN_INFO (name)->info.ptr_info) SSA_NAME_PTR_INFO (name) = VN_INFO (name)->info.ptr_info; @@ -4338,6 +4331,28 @@ free_scc_vn (void) } } } +} + +void +free_scc_vn (void) +{ + size_t i; + + delete constant_to_value_id; + constant_to_value_id = NULL; + BITMAP_FREE (constant_value_ids); + shared_lookup_phiargs.release (); + shared_lookup_references.release (); + XDELETEVEC (rpo_numbers); + + for (i = 0; i < num_ssa_names; i++) + { + tree name = ssa_name (i); + if (name + && has_VN_INFO (name) + && VN_INFO (name)->needs_insertion) + release_ssa_name (name); + } obstack_free (&vn_ssa_aux_obstack, NULL); vn_ssa_aux_table.release (); |