ipa-icf.c (sem_item::add_type): Do not look for TYPE_CANONICAL...

* ipa-icf.c (sem_item::add_type): Do not look for TYPE_CANONICAL;
	do not check AGGREGATE_TYPE_P when adding TYPE_MODE;
	Check that all record types are complete.
	* ipa-icf-gimple.c (func_checker::compatible_types_p): Do not
	compare alias sets for types w/o alias sets.

From-SVN: r230698
This commit is contained in:
Jan Hubicka 2015-11-21 04:57:48 +01:00 committed by Jan Hubicka
parent 65310691f8
commit 5e83f17dd0
3 changed files with 19 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2015-11-07 Jan Hubicka <hubicka@ucw.cz>
* ipa-icf.c (sem_item::add_type): Do not look for TYPE_CANONICAL;
do not check AGGREGATE_TYPE_P when adding TYPE_MODE;
Check that all record types are complete.
* ipa-icf-gimple.c (func_checker::compatible_types_p): Do not
compare alias sets for types w/o alias sets.
2015-11-20 Eric Botcazou <ebotcazou@adacore.com>
* config/sparc/sparc.md (umulxhi_vis): Move around.

View File

@ -233,7 +233,15 @@ func_checker::compatible_types_p (tree t1, tree t2)
if (!types_compatible_p (t1, t2))
return return_false_with_msg ("types are not compatible");
if (get_alias_set (t1) != get_alias_set (t2))
/* We do a lot of unnecesary matching of types that are not being
accessed and thus do not need to be compatible. In longer term we should
remove these checks on all types which are not accessed as memory
locations.
For time being just avoid calling get_alias_set on types that are not
having alias sets defined at all. */
if (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)
&& get_alias_set (t1) != get_alias_set (t2))
return return_false_with_msg ("alias sets are different");
return true;

View File

@ -1543,11 +1543,8 @@ sem_item::add_type (const_tree type, inchash::hash &hstate)
}
type = TYPE_MAIN_VARIANT (type);
if (TYPE_CANONICAL (type))
type = TYPE_CANONICAL (type);
if (!AGGREGATE_TYPE_P (type))
hstate.add_int (TYPE_MODE (type));
hstate.add_int (TYPE_MODE (type));
if (TREE_CODE (type) == COMPLEX_TYPE)
{
@ -1574,6 +1571,7 @@ sem_item::add_type (const_tree type, inchash::hash &hstate)
}
else if (RECORD_OR_UNION_TYPE_P (type))
{
gcc_checking_assert (COMPLETE_TYPE_P (type));
hashval_t *val = optimizer->m_type_hash_cache.get (type);
if (!val)