diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-09-12 01:16:42 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-09-11 23:16:42 +0000 |
commit | 1ee85ee19b06863781374b7c9f97e4f6e931118b (patch) | |
tree | 5ca60267bac44557141301c497a4c5364a3466f9 /gcc/tree.c | |
parent | bc9132dee6c4a8a4348a15ad62772d632351388b (diff) | |
download | gcc-1ee85ee19b06863781374b7c9f97e4f6e931118b.zip gcc-1ee85ee19b06863781374b7c9f97e4f6e931118b.tar.gz gcc-1ee85ee19b06863781374b7c9f97e4f6e931118b.tar.bz2 |
common.opt (flto-odr-type-merging): New flag.
* common.opt (flto-odr-type-merging): New flag.
* ipa-deivrt.c (hash_type_name): Use ODR names for hasing if availale.
(types_same_for_odr): Likewise.
(odr_subtypes_equivalent_p): Likewise.
(add_type_duplicate): Do not walk type variants.
(register_odr_type): New function.
* ipa-utils.h (register_odr_type): Declare.
(odr_type_p): New function.
* langhooks.c (lhd_set_decl_assembler_name): Do not compute
TYPE_DECLs
* doc/invoke.texi (-flto-odr-type-merging): Document.
* tree.c (need_assembler_name_p): Compute ODR names when asked
for it.
* tree.h (DECL_ASSEMBLER_NAME): Update comment.
* lto.c (lto_read_decls): Register ODR types.
From-SVN: r215196
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -4980,6 +4980,15 @@ free_lang_data_in_type (tree type) static inline bool need_assembler_name_p (tree decl) { + /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition Rule + merging. */ + if (flag_lto_odr_type_mering + && TREE_CODE (decl) == TYPE_DECL + && DECL_NAME (decl) + && decl == TYPE_NAME (TREE_TYPE (decl)) + && !is_lang_specific (TREE_TYPE (decl)) + && !type_in_anonymous_namespace_p (TREE_TYPE (decl))) + return !DECL_ASSEMBLER_NAME_SET_P (decl); /* Only FUNCTION_DECLs and VAR_DECLs are considered. */ if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL) |