aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-sccvn.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-04-19 13:22:19 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-04-19 13:22:19 +0000
commit65f52ee9b978858ed791162f29a04f2cbcef6dbc (patch)
treec229c8622615d24353d0e083b34905437310e60f /gcc/tree-ssa-sccvn.c
parent27b95a65410ccb700752c8178fd19f1485a4b5bf (diff)
downloadgcc-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.c39
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 ();