aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2010-04-28 19:11:50 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2010-04-28 19:11:50 +0000
commit8478130d94af3313c5c8a8c3e1d5a8033e949750 (patch)
tree1d892ec6e17c326d149f09c6e7cf245a89024974 /gcc/tree.h
parent331c7fcdd09ca68e53bd5e64cd4b1cdc04416aa2 (diff)
downloadgcc-8478130d94af3313c5c8a8c3e1d5a8033e949750.zip
gcc-8478130d94af3313c5c8a8c3e1d5a8033e949750.tar.gz
gcc-8478130d94af3313c5c8a8c3e1d5a8033e949750.tar.bz2
Uniquization of constants at the Tree level
Uniquization of constants at the Tree level * tree.h (DECL_IN_CONSTANT_POOL): New macro (tree_decl_with_vis): Add in_constant_pool bit, move shadowed_for_var_p bit to the end. (tree_output_constant_def): Declare. * gimplify.c (gimplify_init_constructor): When using block copy, uniquize the constant constructor on the RHS. * lto-streamer-in.c (unpack_ts_decl_with_vis_value_fields): Deal with DECL_IN_CONSTANT_POOL flag. * lto-streamer-out.c (pack_ts_decl_with_vis_value_fields): Likewise. * varasm.c (make_decl_rtl): Deal with variables belonging to the global constant pool. (assemble_variable): Deal with symbols belonging to the tree constant pool. (get_constant_section): Add ALIGN parameter and simplify. (build_constant_desc): Build a VAR_DECL and attach it to the symbol. (assemble_constant_contents): Use the expression of the VAR_DECL. (output_constant_def_contents): Use the alignment of the VAR_DECL. (tree_output_constant_def): New global function. (mark_constant): Use the expression of the VAR_DECL. (place_block_symbol): Use the alignment of the VAR_DECL and the size of its expression. (output_object_block): Likewise and assemble the expression. ada/ * gcc-interface/trans.c (gnat_gimplify_expr) <ADDR_EXPR>: Uniquize constant constructors before taking their address. From-SVN: r158838
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index 6954e5a..99bf29b 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2963,6 +2963,11 @@ struct GTY(()) tree_parm_decl {
#define DECL_IN_TEXT_SECTION(NODE) \
(VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
+/* In a VAR_DECL that's static,
+ nonzero if it belongs to the global constant pool. */
+#define DECL_IN_CONSTANT_POOL(NODE) \
+ (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool)
+
/* Nonzero for a given ..._DECL node means that this node should be
put in .common, if possible. If a DECL_INITIAL is given, and it
is not error_mark_node, then the decl cannot be put in .common. */
@@ -3102,9 +3107,8 @@ struct GTY(()) tree_decl_with_vis {
unsigned thread_local : 1;
unsigned common_flag : 1;
unsigned in_text_section : 1;
+ unsigned in_constant_pool : 1;
unsigned dllimport_flag : 1;
- /* Used by C++. Might become a generic decl flag. */
- unsigned shadowed_for_var_p : 1;
/* Don't belong to VAR_DECL exclusively. */
unsigned weak_flag : 1;
@@ -3117,7 +3121,9 @@ struct GTY(()) tree_decl_with_vis {
/* Belong to FUNCTION_DECL exclusively. */
unsigned init_priority_p : 1;
- /* 15 unused bits. */
+ /* Used by C++ only. Might become a generic decl flag. */
+ unsigned shadowed_for_var_p : 1;
+ /* 14 unused bits. */
};
extern tree decl_debug_expr_lookup (tree);
@@ -5184,6 +5190,7 @@ extern void internal_reference_types (void);
extern unsigned int update_alignment_for_field (record_layout_info, tree,
unsigned int);
/* varasm.c */
+extern tree tree_output_constant_def (tree);
extern void make_decl_rtl (tree);
extern rtx make_decl_rtl_for_debug (tree);
extern void make_decl_one_only (tree, tree);