re PR lto/51497 (The run time for the polyhedron test nf.f90 is ~10% slower with -flto after revision 182107)

2011-12-14  Richard Guenther  <rguenther@suse.de>

	PR lto/51497
	* lto-streamer-in.c (lto_read_body): Fixup local types
	TYPE_CANONICAL and variant chain.

From-SVN: r182336
This commit is contained in:
Richard Guenther 2011-12-14 15:31:24 +00:00 committed by Richard Biener
parent 9532fecfc5
commit 23ee14a5e6
2 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2011-12-14 Richard Guenther <rguenther@suse.de>
PR lto/51497
* lto-streamer-in.c (lto_read_body): Fixup local types
TYPE_CANONICAL and variant chain.
2011-12-14 Richard Guenther <rguenther@suse.de>
* tree.c (free_lang_data_in_type): Do not clear fields

View File

@ -1012,6 +1012,7 @@ lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
struct function *fn = DECL_STRUCT_FUNCTION (fn_decl);
struct lto_in_decl_state *decl_state;
struct cgraph_node *node = cgraph_get_node (fn_decl);
unsigned from;
gcc_checking_assert (node);
push_cfun (fn);
@ -1025,7 +1026,33 @@ lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
input_cfg (&ib_cfg, fn, node->count_materialization_scale);
/* Set up the struct function. */
from = VEC_length (tree, data_in->reader_cache->nodes);
input_function (fn_decl, data_in, &ib_main);
/* And fixup types we streamed locally. */
{
struct streamer_tree_cache_d *cache = data_in->reader_cache;
unsigned len = VEC_length (tree, cache->nodes);
unsigned i;
for (i = len; i-- > from;)
{
tree t = VEC_index (tree, cache->nodes, i);
if (t == NULL_TREE)
continue;
if (TYPE_P (t))
{
gcc_assert (TYPE_CANONICAL (t) == NULL_TREE);
TYPE_CANONICAL (t) = TYPE_MAIN_VARIANT (t);
if (TYPE_MAIN_VARIANT (t) != t)
{
gcc_assert (TYPE_NEXT_VARIANT (t) == NULL_TREE);
TYPE_NEXT_VARIANT (t)
= TYPE_NEXT_VARIANT (TYPE_MAIN_VARIANT (t));
TYPE_NEXT_VARIANT (TYPE_MAIN_VARIANT (t)) = t;
}
}
}
}
/* We should now be in SSA. */
cfun->gimple_df->in_ssa_p = true;