This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Stream TYPE_FINAL_P and DECL_FINAL_P to LTO
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org, rguenther at suse dot de
- Date: Sun, 25 Aug 2013 17:23:29 +0200
- Subject: Stream TYPE_FINAL_P and DECL_FINAL_P to LTO
Hi,
this patch adds code to stream DECL_FINAL_P/TYPE_FINAL_P into LTO so we can
use it after the ipa-devirt code at LTO time is merged in.
(http://gcc.gnu.org/ml/gcc-patches/2013-08/msg01007.html)
Bootstrapped/regtested x86_64-linux, OK?
Honza
* lto-streamer-out.c (hash_tree): Add streaming of DECL_FINAL_P
and TYPE_FINAL_P
* lto/lto.c (compare_tree_sccs_1): Add TYPE_FINAL_P and DECL_FINAL_P
* tree-streamer-out.c (pack_ts_decl_with_vis_value_fields):
Add DECL_FINAL_P.
(pack_ts_type_common_value_fields): Add TYPE_FINAL_P.
* tree-streamer-in.c (unpack_ts_decl_with_vis_value_fields):
Add DECL_FINAL_P.
(unpack_ts_type_common_value_fields): Add TYPE_FINAL_P.
Index: lto-streamer-out.c
===================================================================
--- lto-streamer-out.c (revision 201974)
+++ lto-streamer-out.c (working copy)
@@ -798,6 +798,9 @@ hash_tree (struct streamer_tree_cache_d
v);
v = iterative_hash_host_wide_int (DECL_TLS_MODEL (t), v);
}
+ if (TREE_CODE (t) == FUNCTION_DECL)
+ v = iterative_hash_host_wide_int (DECL_FINAL_P (t),
+ v);
if (VAR_OR_FUNCTION_DECL_P (t))
v = iterative_hash_host_wide_int (DECL_INIT_PRIORITY (t), v);
}
@@ -838,7 +841,10 @@ hash_tree (struct streamer_tree_cache_d
| (TYPE_USER_ALIGN (t) << 5)
| (TYPE_READONLY (t) << 6), v);
if (RECORD_OR_UNION_TYPE_P (t))
- v = iterative_hash_host_wide_int (TYPE_TRANSPARENT_AGGR (t), v);
+ {
+ v = iterative_hash_host_wide_int (TYPE_TRANSPARENT_AGGR (t), v);
+ v = iterative_hash_host_wide_int (TYPE_FINAL_P (t), v);
+ }
else if (code == ARRAY_TYPE)
v = iterative_hash_host_wide_int (TYPE_NONALIASED_COMPONENT (t), v);
v = iterative_hash_host_wide_int (TYPE_PRECISION (t), v);
Index: lto/lto.c
===================================================================
--- lto/lto.c (revision 201974)
+++ lto/lto.c (working copy)
@@ -1892,6 +1892,7 @@ compare_tree_sccs_1 (tree t1, tree t2, t
compare_values (DECL_DISREGARD_INLINE_LIMITS);
compare_values (DECL_PURE_P);
compare_values (DECL_LOOPING_CONST_OR_PURE_P);
+ compare_values (DECL_FINAL_P);
if (DECL_BUILT_IN_CLASS (t1) != NOT_BUILT_IN)
compare_values (DECL_FUNCTION_CODE);
if (DECL_STATIC_DESTRUCTOR (t1))
@@ -1905,7 +1906,10 @@ compare_tree_sccs_1 (tree t1, tree t2, t
compare_values (TYPE_NO_FORCE_BLK);
compare_values (TYPE_NEEDS_CONSTRUCTING);
if (RECORD_OR_UNION_TYPE_P (t1))
- compare_values (TYPE_TRANSPARENT_AGGR);
+ {
+ compare_values (TYPE_TRANSPARENT_AGGR);
+ compare_values (TYPE_FINAL_P);
+ }
else if (code == ARRAY_TYPE)
compare_values (TYPE_NONALIASED_COMPONENT);
compare_values (TYPE_PACKED);
Index: tree-streamer-out.c
===================================================================
--- tree-streamer-out.c (revision 201974)
+++ tree-streamer-out.c (working copy)
@@ -242,6 +242,8 @@ pack_ts_decl_with_vis_value_fields (stru
bp_pack_value (bp, DECL_TLS_MODEL (expr), 3);
}
+ if (TREE_CODE (expr) == FUNCTION_DECL)
+ bp_pack_value (bp, DECL_FINAL_P (expr), 1);
if (VAR_OR_FUNCTION_DECL_P (expr))
bp_pack_var_len_unsigned (bp, DECL_INIT_PRIORITY (expr));
}
@@ -293,7 +295,10 @@ pack_ts_type_common_value_fields (struct
bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1);
bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
if (RECORD_OR_UNION_TYPE_P (expr))
- bp_pack_value (bp, TYPE_TRANSPARENT_AGGR (expr), 1);
+ {
+ bp_pack_value (bp, TYPE_TRANSPARENT_AGGR (expr), 1);
+ bp_pack_value (bp, TYPE_FINAL_P (expr), 1);
+ }
else if (TREE_CODE (expr) == ARRAY_TYPE)
bp_pack_value (bp, TYPE_NONALIASED_COMPONENT (expr), 1);
bp_pack_value (bp, TYPE_PACKED (expr), 1);
Index: tree-streamer-in.c
===================================================================
--- tree-streamer-in.c (revision 201974)
+++ tree-streamer-in.c (working copy)
@@ -275,6 +275,8 @@ unpack_ts_decl_with_vis_value_fields (st
DECL_TLS_MODEL (expr) = (enum tls_model) bp_unpack_value (bp, 3);
}
+ if (TREE_CODE (expr) == FUNCTION_DECL)
+ DECL_FINAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
if (VAR_OR_FUNCTION_DECL_P (expr))
{
priority_type p;
@@ -346,7 +348,10 @@ unpack_ts_type_common_value_fields (stru
TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
if (RECORD_OR_UNION_TYPE_P (expr))
- TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
+ {
+ TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
+ TYPE_FINAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
+ }
else if (TREE_CODE (expr) == ARRAY_TYPE)
TYPE_NONALIASED_COMPONENT (expr) = (unsigned) bp_unpack_value (bp, 1);
TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);