summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/lto-streamer-in.c7
-rw-r--r--gcc/lto-streamer-out.c6
3 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d0aeef43b45..2f462c41f60 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2016-04-22 Richard Biener <rguenther@suse.de>
+ * lto-streamer-in.c (input_ssa_names): Do not allocate
+ GIMPLE_NOP for all SSA names.
+ * lto-streamer-out.c (output_ssa_names): Do not output
+ SSA names that should have been released.
+
+2016-04-22 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/70740
* tree-ssa-phiprop.c (propagate_with_phi): Handle inserted
VDEF.
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index dd48777effa..1970d45ee86 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -881,10 +881,13 @@ input_ssa_names (struct lto_input_block *ib, struct data_in *data_in,
is_default_def = (streamer_read_uchar (ib) != 0);
name = stream_read_tree (ib, data_in);
- ssa_name = make_ssa_name_fn (fn, name, gimple_build_nop ());
+ ssa_name = make_ssa_name_fn (fn, name, NULL);
if (is_default_def)
- set_ssa_default_def (cfun, SSA_NAME_VAR (ssa_name), ssa_name);
+ {
+ set_ssa_default_def (cfun, SSA_NAME_VAR (ssa_name), ssa_name);
+ SSA_NAME_DEF_STMT (ssa_name) = gimple_build_nop ();
+ }
i = streamer_read_uhwi (ib);
}
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 6703d4106de..35e58fd24cc 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -1816,7 +1816,11 @@ output_ssa_names (struct output_block *ob, struct function *fn)
if (ptr == NULL_TREE
|| SSA_NAME_IN_FREE_LIST (ptr)
- || virtual_operand_p (ptr))
+ || virtual_operand_p (ptr)
+ /* Simply skip unreleased SSA names. */
+ || (! SSA_NAME_IS_DEFAULT_DEF (ptr)
+ && (! SSA_NAME_DEF_STMT (ptr)
+ || ! gimple_bb (SSA_NAME_DEF_STMT (ptr)))))
continue;
streamer_write_uhwi (ob, i);