aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-live.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-09-26 13:18:31 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-09-26 13:18:31 +0000
commita2544177b989c29fe893e55d422c8d9e6f27c6b3 (patch)
tree3bd405507fb88ca50d81b2390e2a1e2748dce936 /gcc/tree-ssa-live.c
parent6d1ca9a0f323e2de85299910ef0d8bcc9dc7a81d (diff)
downloadgcc-a2544177b989c29fe893e55d422c8d9e6f27c6b3.zip
gcc-a2544177b989c29fe893e55d422c8d9e6f27c6b3.tar.gz
gcc-a2544177b989c29fe893e55d422c8d9e6f27c6b3.tar.bz2
tree-ssa-live.c (var_map_base_init): Handle SSA names with DECL_IGNORED_P base VAR_DECLs like anonymous SSA names.
2013-09-26 Richard Biener <rguenther@suse.de> * tree-ssa-live.c (var_map_base_init): Handle SSA names with DECL_IGNORED_P base VAR_DECLs like anonymous SSA names. (loe_visit_block): Use gcc_checking_assert. * tree-ssa-coalesce.c (create_outofssa_var_map): Use gimple_assign_ssa_name_copy_p. (gimple_can_coalesce_p): Adjust according to the var_map_base_init change. * gcc.dg/tree-ssa/coalesce-2.c: New testcase. From-SVN: r202944
Diffstat (limited to 'gcc/tree-ssa-live.c')
-rw-r--r--gcc/tree-ssa-live.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c
index c21b2e8..eb36a90 100644
--- a/gcc/tree-ssa-live.c
+++ b/gcc/tree-ssa-live.c
@@ -104,7 +104,9 @@ var_map_base_init (var_map map)
struct tree_int_map **slot;
unsigned baseindex;
var = partition_to_var (map, x);
- if (SSA_NAME_VAR (var))
+ if (SSA_NAME_VAR (var)
+ && (!VAR_P (SSA_NAME_VAR (var))
+ || !DECL_IGNORED_P (SSA_NAME_VAR (var))))
m->base.from = SSA_NAME_VAR (var);
else
/* This restricts what anonymous SSA names we can coalesce
@@ -990,9 +992,10 @@ loe_visit_block (tree_live_info_p live, basic_block bb, sbitmap visited,
edge_iterator ei;
basic_block pred_bb;
bitmap loe;
- gcc_assert (!bitmap_bit_p (visited, bb->index));
+ gcc_checking_assert (!bitmap_bit_p (visited, bb->index));
bitmap_set_bit (visited, bb->index);
+
loe = live_on_entry (live, bb);
FOR_EACH_EDGE (e, ei, bb->preds)