mirror of git://gcc.gnu.org/git/gcc.git
lto.c (GIMPLE_REGISTER_TYPE): New define.
2011-12-21 Richard Guenther <rguenther@suse.de> lto/ * lto.c (GIMPLE_REGISTER_TYPE): New define. (LTO_FIXUP_TREE): Use it. (uniquify_nodes): Mark new non-prevailing types and avoid calling gimple_register_type on others. (lto_read_decls): Add comment. From-SVN: r182591
This commit is contained in:
parent
d6e1acf654
commit
b03eda0dcd
|
@ -1,3 +1,11 @@
|
||||||
|
2011-12-21 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
* lto.c (GIMPLE_REGISTER_TYPE): New define.
|
||||||
|
(LTO_FIXUP_TREE): Use it.
|
||||||
|
(uniquify_nodes): Mark new non-prevailing types and avoid
|
||||||
|
calling gimple_register_type on others.
|
||||||
|
(lto_read_decls): Add comment.
|
||||||
|
|
||||||
2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
|
2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
* lto.h (lto_parse_hex): Delete.
|
* lto.h (lto_parse_hex): Delete.
|
||||||
|
|
|
@ -306,13 +306,16 @@ remember_with_vars (tree t)
|
||||||
*(tree *) htab_find_slot (tree_with_vars, t, INSERT) = t;
|
*(tree *) htab_find_slot (tree_with_vars, t, INSERT) = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GIMPLE_REGISTER_TYPE(tt) \
|
||||||
|
(TREE_VISITED (tt) ? gimple_register_type (tt) : tt)
|
||||||
|
|
||||||
#define LTO_FIXUP_TREE(tt) \
|
#define LTO_FIXUP_TREE(tt) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (tt) \
|
if (tt) \
|
||||||
{ \
|
{ \
|
||||||
if (TYPE_P (tt)) \
|
if (TYPE_P (tt)) \
|
||||||
(tt) = gimple_register_type (tt); \
|
(tt) = GIMPLE_REGISTER_TYPE (tt); \
|
||||||
if (VAR_OR_FUNCTION_DECL_P (tt) && TREE_PUBLIC (tt)) \
|
if (VAR_OR_FUNCTION_DECL_P (tt) && TREE_PUBLIC (tt)) \
|
||||||
remember_with_vars (t); \
|
remember_with_vars (t); \
|
||||||
} \
|
} \
|
||||||
|
@ -731,7 +734,14 @@ uniquify_nodes (struct data_in *data_in, unsigned from)
|
||||||
{
|
{
|
||||||
tree t = VEC_index (tree, cache->nodes, i);
|
tree t = VEC_index (tree, cache->nodes, i);
|
||||||
if (t && TYPE_P (t))
|
if (t && TYPE_P (t))
|
||||||
gimple_register_type (t);
|
{
|
||||||
|
tree newt = gimple_register_type (t);
|
||||||
|
/* Mark non-prevailing types so we fix them up. No need
|
||||||
|
to reset that flag afterwards - nothing that refers
|
||||||
|
to those types is left and they are collected. */
|
||||||
|
if (newt != t)
|
||||||
|
TREE_VISITED (t) = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Second fixup all trees in the new cache entries. */
|
/* Second fixup all trees in the new cache entries. */
|
||||||
|
@ -749,7 +759,7 @@ uniquify_nodes (struct data_in *data_in, unsigned from)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Now try to find a canonical variant of T itself. */
|
/* Now try to find a canonical variant of T itself. */
|
||||||
t = gimple_register_type (t);
|
t = GIMPLE_REGISTER_TYPE (t);
|
||||||
|
|
||||||
if (t == oldt)
|
if (t == oldt)
|
||||||
{
|
{
|
||||||
|
@ -771,7 +781,7 @@ uniquify_nodes (struct data_in *data_in, unsigned from)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Query our new main variant. */
|
/* Query our new main variant. */
|
||||||
mv = gimple_register_type (TYPE_MAIN_VARIANT (t));
|
mv = GIMPLE_REGISTER_TYPE (TYPE_MAIN_VARIANT (t));
|
||||||
|
|
||||||
/* If we were the variant leader and we get replaced ourselves drop
|
/* If we were the variant leader and we get replaced ourselves drop
|
||||||
all variants from our list. */
|
all variants from our list. */
|
||||||
|
@ -901,6 +911,9 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
|
||||||
data_in = lto_data_in_create (decl_data, (const char *) data + string_offset,
|
data_in = lto_data_in_create (decl_data, (const char *) data + string_offset,
|
||||||
header->string_size, resolutions);
|
header->string_size, resolutions);
|
||||||
|
|
||||||
|
/* We do not uniquify the pre-loaded cache entries, those are middle-end
|
||||||
|
internal types that should not be merged. */
|
||||||
|
|
||||||
/* Read the global declarations and types. */
|
/* Read the global declarations and types. */
|
||||||
while (ib_main.p < ib_main.len)
|
while (ib_main.p < ib_main.len)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue