tree.h (union tree_ann_d): Don't declare.
* tree.h (union tree_ann_d): Don't declare. (tree_base): Remove ann field. (struct var_ann_d): Declare forward. (tree_result_decl, tree_parm_decl, tree_var_decl): Add ann field. (DECL_VAR_ANN_PTR): New macro. * tree-dfa.c (create_var_ann): Rewrite in terms of above macro, accept only VAR, PARM or RESULT decls. (create_tree_common_ann): Remove. (remove_referenced_var): Use DECL_VAR_ANN_PTR. * tree-eh.c (lookup_expr_eh_lp): Remove. * tree-flow-inline.h (var_ann, get_var_ann): Rewrite in terms of DECL_VAR_ANN_PTR. (ann_type, tree_common_ann, get_tree_common_ann): Remove. * tree-flow.h (enum tree_ann_type): Remove. (struct tree_ann_common_d): Remove. (struct var_ann_d): Remove common field. (union tree_ann_d): Remove. (tree_ann_t, tree_ann_common_t): Remove typedefs. (tree_common_ann, get_tree_common_ann, ann_type, create_tree_common_ann, lookup_expr_eh_lp): Don't declare. * tree-ssa.c (delete_tree_ssa): Use DECL_VAR_ANN_PTR. * tree.c (copy_node_stat): Use DECL_VAR_ANN_PTR. * builtins.c (expand_builtin_memcpy): Use currently_expanding_gimple_stmt instead of tree annotation. (expand_builtin_memset_args): Ditto. * cfgexpand.c (currently_expanding_gimple_stmt): Add global variable. (expand_call_stmt): Don't set tree annotation. (expand_gimple_basic_block): Set currently_expanding_gimple_stmt. * expr.c (expand_expr_real): Don't call lookup_expr_eh_lp. * gimple.h (currently_expanding_gimple_stmt): Declare. From-SVN: r154502
This commit is contained in:
parent
6e0b03f585
commit
a5883ba0de
|
@ -1,3 +1,36 @@
|
||||||
|
2009-11-24 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
|
* tree.h (union tree_ann_d): Don't declare.
|
||||||
|
(tree_base): Remove ann field.
|
||||||
|
(struct var_ann_d): Declare forward.
|
||||||
|
(tree_result_decl, tree_parm_decl, tree_var_decl): Add ann field.
|
||||||
|
(DECL_VAR_ANN_PTR): New macro.
|
||||||
|
* tree-dfa.c (create_var_ann): Rewrite in terms of above macro,
|
||||||
|
accept only VAR, PARM or RESULT decls.
|
||||||
|
(create_tree_common_ann): Remove.
|
||||||
|
(remove_referenced_var): Use DECL_VAR_ANN_PTR.
|
||||||
|
* tree-eh.c (lookup_expr_eh_lp): Remove.
|
||||||
|
* tree-flow-inline.h (var_ann, get_var_ann): Rewrite in terms of
|
||||||
|
DECL_VAR_ANN_PTR.
|
||||||
|
(ann_type, tree_common_ann, get_tree_common_ann): Remove.
|
||||||
|
* tree-flow.h (enum tree_ann_type): Remove.
|
||||||
|
(struct tree_ann_common_d): Remove.
|
||||||
|
(struct var_ann_d): Remove common field.
|
||||||
|
(union tree_ann_d): Remove.
|
||||||
|
(tree_ann_t, tree_ann_common_t): Remove typedefs.
|
||||||
|
(tree_common_ann, get_tree_common_ann, ann_type,
|
||||||
|
create_tree_common_ann, lookup_expr_eh_lp): Don't declare.
|
||||||
|
* tree-ssa.c (delete_tree_ssa): Use DECL_VAR_ANN_PTR.
|
||||||
|
* tree.c (copy_node_stat): Use DECL_VAR_ANN_PTR.
|
||||||
|
* builtins.c (expand_builtin_memcpy): Use
|
||||||
|
currently_expanding_gimple_stmt instead of tree annotation.
|
||||||
|
(expand_builtin_memset_args): Ditto.
|
||||||
|
* cfgexpand.c (currently_expanding_gimple_stmt): Add global variable.
|
||||||
|
(expand_call_stmt): Don't set tree annotation.
|
||||||
|
(expand_gimple_basic_block): Set currently_expanding_gimple_stmt.
|
||||||
|
* expr.c (expand_expr_real): Don't call lookup_expr_eh_lp.
|
||||||
|
* gimple.h (currently_expanding_gimple_stmt): Declare.
|
||||||
|
|
||||||
2009-11-24 Paolo Carlini <paolo.carlini@oracle.com>
|
2009-11-24 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
* dwarf2out.c (add_location_or_const_value_attribute): Remove
|
* dwarf2out.c (add_location_or_const_value_attribute): Remove
|
||||||
|
@ -11,7 +44,7 @@
|
||||||
|
|
||||||
2009-11-24 Basile Starynkevitch <basile@starynkevitch.net>
|
2009-11-24 Basile Starynkevitch <basile@starynkevitch.net>
|
||||||
|
|
||||||
* Makefile.in (PLUGIN_HEADERS): Added files: cppdefault.h flags.h
|
* Makefile.in (PLUGIN_HEADERS): Added files: cppdefault.h flags.h
|
||||||
$(MD5_H) params.def params.h prefix.h tree-inline.h.
|
$(MD5_H) params.def params.h prefix.h tree-inline.h.
|
||||||
|
|
||||||
2009-11-24 Paul Brook <paul@codesourcery.com>
|
2009-11-24 Paul Brook <paul@codesourcery.com>
|
||||||
|
@ -30,14 +63,14 @@
|
||||||
|
|
||||||
* cfgrtl.c (commit_one_edge_insertion): Remove set but not used
|
* cfgrtl.c (commit_one_edge_insertion): Remove set but not used
|
||||||
local variable bb_note.
|
local variable bb_note.
|
||||||
* dominance.c (get_dominated_by): Likewise local var n.
|
* dominance.c (get_dominated_by): Likewise local var n.
|
||||||
(output_file_names): Likewise local var idx.
|
(output_file_names): Likewise local var idx.
|
||||||
(add_location_or_const_value_attribute): Likewise local var status.
|
(add_location_or_const_value_attribute): Likewise local var status.
|
||||||
* dwarf2out.c (gen_variable_die): Likewise local var field.
|
* dwarf2out.c (gen_variable_die): Likewise local var field.
|
||||||
* emit-rtl.c (no_line_numbers): Remove.
|
* emit-rtl.c (no_line_numbers): Remove.
|
||||||
(init_emit_once): Remove line_numbers parameter.
|
(init_emit_once): Remove line_numbers parameter.
|
||||||
* rtl.h (init_emit_once): Adjust prototype.
|
* rtl.h (init_emit_once): Adjust prototype.
|
||||||
* toplev.c (backend_init): Adjust init_emit_once call.
|
* toplev.c (backend_init): Adjust init_emit_once call.
|
||||||
|
|
||||||
2009-11-24 Richard Guenther <rguenther@suse.de>
|
2009-11-24 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
|
|
@ -3259,7 +3259,6 @@ expand_builtin_memcpy (tree exp, rtx target)
|
||||||
rtx dest_mem, src_mem, dest_addr, len_rtx;
|
rtx dest_mem, src_mem, dest_addr, len_rtx;
|
||||||
HOST_WIDE_INT expected_size = -1;
|
HOST_WIDE_INT expected_size = -1;
|
||||||
unsigned int expected_align = 0;
|
unsigned int expected_align = 0;
|
||||||
tree_ann_common_t ann;
|
|
||||||
|
|
||||||
/* If DEST is not a pointer type, call the normal function. */
|
/* If DEST is not a pointer type, call the normal function. */
|
||||||
if (dest_align == 0)
|
if (dest_align == 0)
|
||||||
|
@ -3270,9 +3269,9 @@ expand_builtin_memcpy (tree exp, rtx target)
|
||||||
if (src_align == 0)
|
if (src_align == 0)
|
||||||
return NULL_RTX;
|
return NULL_RTX;
|
||||||
|
|
||||||
ann = tree_common_ann (exp);
|
if (currently_expanding_gimple_stmt)
|
||||||
if (ann)
|
stringop_block_profile (currently_expanding_gimple_stmt,
|
||||||
stringop_block_profile (ann->stmt, &expected_align, &expected_size);
|
&expected_align, &expected_size);
|
||||||
|
|
||||||
if (expected_align < dest_align)
|
if (expected_align < dest_align)
|
||||||
expected_align = dest_align;
|
expected_align = dest_align;
|
||||||
|
@ -3737,7 +3736,6 @@ expand_builtin_memset_args (tree dest, tree val, tree len,
|
||||||
rtx dest_mem, dest_addr, len_rtx;
|
rtx dest_mem, dest_addr, len_rtx;
|
||||||
HOST_WIDE_INT expected_size = -1;
|
HOST_WIDE_INT expected_size = -1;
|
||||||
unsigned int expected_align = 0;
|
unsigned int expected_align = 0;
|
||||||
tree_ann_common_t ann;
|
|
||||||
|
|
||||||
dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
|
dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT);
|
||||||
|
|
||||||
|
@ -3745,9 +3743,9 @@ expand_builtin_memset_args (tree dest, tree val, tree len,
|
||||||
if (dest_align == 0)
|
if (dest_align == 0)
|
||||||
return NULL_RTX;
|
return NULL_RTX;
|
||||||
|
|
||||||
ann = tree_common_ann (orig_exp);
|
if (currently_expanding_gimple_stmt)
|
||||||
if (ann)
|
stringop_block_profile (currently_expanding_gimple_stmt,
|
||||||
stringop_block_profile (ann->stmt, &expected_align, &expected_size);
|
&expected_align, &expected_size);
|
||||||
|
|
||||||
if (expected_align < dest_align)
|
if (expected_align < dest_align)
|
||||||
expected_align = dest_align;
|
expected_align = dest_align;
|
||||||
|
|
|
@ -49,6 +49,10 @@ along with GCC; see the file COPYING3. If not see
|
||||||
into RTL. */
|
into RTL. */
|
||||||
struct ssaexpand SA;
|
struct ssaexpand SA;
|
||||||
|
|
||||||
|
/* This variable holds the currently expanded gimple statement for purposes
|
||||||
|
of comminucating the profile info to the builtin expanders. */
|
||||||
|
gimple currently_expanding_gimple_stmt;
|
||||||
|
|
||||||
/* Return an expression tree corresponding to the RHS of GIMPLE
|
/* Return an expression tree corresponding to the RHS of GIMPLE
|
||||||
statement STMT. */
|
statement STMT. */
|
||||||
|
|
||||||
|
@ -1756,7 +1760,6 @@ expand_call_stmt (gimple stmt)
|
||||||
{
|
{
|
||||||
tree exp;
|
tree exp;
|
||||||
tree lhs = gimple_call_lhs (stmt);
|
tree lhs = gimple_call_lhs (stmt);
|
||||||
tree fndecl = gimple_call_fndecl (stmt);
|
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3);
|
exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3);
|
||||||
|
@ -1782,15 +1785,6 @@ expand_call_stmt (gimple stmt)
|
||||||
SET_EXPR_LOCATION (exp, gimple_location (stmt));
|
SET_EXPR_LOCATION (exp, gimple_location (stmt));
|
||||||
TREE_BLOCK (exp) = gimple_block (stmt);
|
TREE_BLOCK (exp) = gimple_block (stmt);
|
||||||
|
|
||||||
/* Record the original call statement, as it may be used
|
|
||||||
to retrieve profile information during expansion. */
|
|
||||||
|
|
||||||
if (fndecl && DECL_BUILT_IN (fndecl))
|
|
||||||
{
|
|
||||||
tree_ann_common_t ann = get_tree_common_ann (exp);
|
|
||||||
ann->stmt = stmt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lhs)
|
if (lhs)
|
||||||
expand_assignment (lhs, exp, false);
|
expand_assignment (lhs, exp, false);
|
||||||
else
|
else
|
||||||
|
@ -3106,6 +3100,7 @@ expand_gimple_basic_block (basic_block bb)
|
||||||
basic_block new_bb;
|
basic_block new_bb;
|
||||||
|
|
||||||
stmt = gsi_stmt (gsi);
|
stmt = gsi_stmt (gsi);
|
||||||
|
currently_expanding_gimple_stmt = stmt;
|
||||||
|
|
||||||
/* Expand this statement, then evaluate the resulting RTL and
|
/* Expand this statement, then evaluate the resulting RTL and
|
||||||
fixup the CFG accordingly. */
|
fixup the CFG accordingly. */
|
||||||
|
@ -3203,6 +3198,8 @@ expand_gimple_basic_block (basic_block bb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currently_expanding_gimple_stmt = NULL;
|
||||||
|
|
||||||
/* Expand implicit goto and convert goto_locus. */
|
/* Expand implicit goto and convert goto_locus. */
|
||||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||||
{
|
{
|
||||||
|
|
29
gcc/expr.c
29
gcc/expr.c
|
@ -7157,8 +7157,7 @@ rtx
|
||||||
expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
|
expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
|
||||||
enum expand_modifier modifier, rtx *alt_rtl)
|
enum expand_modifier modifier, rtx *alt_rtl)
|
||||||
{
|
{
|
||||||
int lp_nr = 0;
|
rtx ret;
|
||||||
rtx ret, last = NULL;
|
|
||||||
|
|
||||||
/* Handle ERROR_MARK before anybody tries to access its type. */
|
/* Handle ERROR_MARK before anybody tries to access its type. */
|
||||||
if (TREE_CODE (exp) == ERROR_MARK
|
if (TREE_CODE (exp) == ERROR_MARK
|
||||||
|
@ -7168,13 +7167,6 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
|
||||||
return ret ? ret : const0_rtx;
|
return ret ? ret : const0_rtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag_non_call_exceptions)
|
|
||||||
{
|
|
||||||
lp_nr = lookup_expr_eh_lp (exp);
|
|
||||||
if (lp_nr)
|
|
||||||
last = get_last_insn ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If this is an expression of some kind and it has an associated line
|
/* If this is an expression of some kind and it has an associated line
|
||||||
number, then emit the line number before expanding the expression.
|
number, then emit the line number before expanding the expression.
|
||||||
|
|
||||||
|
@ -7201,25 +7193,6 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
|
||||||
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
|
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If using non-call exceptions, mark all insns that may trap.
|
|
||||||
expand_call() will mark CALL_INSNs before we get to this code,
|
|
||||||
but it doesn't handle libcalls, and these may trap. */
|
|
||||||
if (lp_nr)
|
|
||||||
{
|
|
||||||
rtx insn;
|
|
||||||
for (insn = next_real_insn (last); insn;
|
|
||||||
insn = next_real_insn (insn))
|
|
||||||
{
|
|
||||||
if (! find_reg_note (insn, REG_EH_REGION, NULL_RTX)
|
|
||||||
/* If we want exceptions for non-call insns, any
|
|
||||||
may_trap_p instruction may throw. */
|
|
||||||
&& GET_CODE (PATTERN (insn)) != CLOBBER
|
|
||||||
&& GET_CODE (PATTERN (insn)) != USE
|
|
||||||
&& insn_could_throw_p (insn))
|
|
||||||
make_reg_eh_region_note (insn, 0, lp_nr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -769,6 +769,10 @@ extern size_t const gimple_ops_offset_[];
|
||||||
/* Map GIMPLE codes to GSS codes. */
|
/* Map GIMPLE codes to GSS codes. */
|
||||||
extern enum gimple_statement_structure_enum const gss_for_code_[];
|
extern enum gimple_statement_structure_enum const gss_for_code_[];
|
||||||
|
|
||||||
|
/* This variable holds the currently expanded gimple statement for purposes
|
||||||
|
of comminucating the profile info to the builtin expanders. */
|
||||||
|
extern gimple currently_expanding_gimple_stmt;
|
||||||
|
|
||||||
gimple gimple_build_return (tree);
|
gimple gimple_build_return (tree);
|
||||||
|
|
||||||
gimple gimple_build_assign_stat (tree, tree MEM_STAT_DECL);
|
gimple gimple_build_assign_stat (tree, tree MEM_STAT_DECL);
|
||||||
|
|
|
@ -133,12 +133,12 @@ create_var_ann (tree t)
|
||||||
var_ann_t ann;
|
var_ann_t ann;
|
||||||
|
|
||||||
gcc_assert (t);
|
gcc_assert (t);
|
||||||
gcc_assert (DECL_P (t));
|
gcc_assert (TREE_CODE (t) == VAR_DECL
|
||||||
gcc_assert (!t->base.ann || t->base.ann->common.type == VAR_ANN);
|
|| TREE_CODE (t) == PARM_DECL
|
||||||
|
|| TREE_CODE (t) == RESULT_DECL);
|
||||||
|
|
||||||
ann = GGC_CNEW (struct var_ann_d);
|
ann = GGC_CNEW (struct var_ann_d);
|
||||||
ann->common.type = VAR_ANN;
|
*DECL_VAR_ANN_PTR (t) = ann;
|
||||||
t->base.ann = (tree_ann_t) ann;
|
|
||||||
|
|
||||||
return ann;
|
return ann;
|
||||||
}
|
}
|
||||||
|
@ -188,24 +188,6 @@ renumber_gimple_stmt_uids_in_blocks (basic_block *blocks, int n_blocks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a new annotation for a tree T. */
|
|
||||||
|
|
||||||
tree_ann_common_t
|
|
||||||
create_tree_common_ann (tree t)
|
|
||||||
{
|
|
||||||
tree_ann_common_t ann;
|
|
||||||
|
|
||||||
gcc_assert (t);
|
|
||||||
gcc_assert (!t->base.ann || t->base.ann->common.type == TREE_ANN_COMMON);
|
|
||||||
|
|
||||||
ann = GGC_CNEW (struct tree_ann_common_d);
|
|
||||||
|
|
||||||
ann->type = TREE_ANN_COMMON;
|
|
||||||
t->base.ann = (tree_ann_t) ann;
|
|
||||||
|
|
||||||
return ann;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Build a temporary. Make sure and register it to be renamed. */
|
/* Build a temporary. Make sure and register it to be renamed. */
|
||||||
|
|
||||||
tree
|
tree
|
||||||
|
@ -654,7 +636,7 @@ remove_referenced_var (tree var)
|
||||||
&& (v_ann = var_ann (var)))
|
&& (v_ann = var_ann (var)))
|
||||||
{
|
{
|
||||||
ggc_free (v_ann);
|
ggc_free (v_ann);
|
||||||
var->base.ann = NULL;
|
*DECL_VAR_ANN_PTR (var) = NULL;
|
||||||
}
|
}
|
||||||
gcc_assert (DECL_P (var));
|
gcc_assert (DECL_P (var));
|
||||||
in.uid = uid;
|
in.uid = uid;
|
||||||
|
|
|
@ -203,21 +203,6 @@ lookup_stmt_eh_lp (gimple t)
|
||||||
return lookup_stmt_eh_lp_fn (cfun, t);
|
return lookup_stmt_eh_lp_fn (cfun, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Likewise, but reference a tree expression instead. */
|
|
||||||
|
|
||||||
int
|
|
||||||
lookup_expr_eh_lp (tree t)
|
|
||||||
{
|
|
||||||
if (cfun && cfun->eh->throw_stmt_table && t && EXPR_P (t))
|
|
||||||
{
|
|
||||||
tree_ann_common_t ann = tree_common_ann (t);
|
|
||||||
if (ann)
|
|
||||||
return ann->lp_nr;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* First pass of EH node decomposition. Build up a tree of GIMPLE_TRY_FINALLY
|
/* First pass of EH node decomposition. Build up a tree of GIMPLE_TRY_FINALLY
|
||||||
nodes and LABEL_DECL nodes. We will use this during the second phase to
|
nodes and LABEL_DECL nodes. We will use this during the second phase to
|
||||||
determine if a goto leaves the body of a TRY_FINALLY_EXPR node. */
|
determine if a goto leaves the body of a TRY_FINALLY_EXPR node. */
|
||||||
|
|
|
@ -152,15 +152,8 @@ fill_referenced_var_vec (VEC (tree, heap) **vec)
|
||||||
static inline var_ann_t
|
static inline var_ann_t
|
||||||
var_ann (const_tree t)
|
var_ann (const_tree t)
|
||||||
{
|
{
|
||||||
var_ann_t ann;
|
const var_ann_t *p = DECL_VAR_ANN_PTR (t);
|
||||||
|
return p ? *p : NULL;
|
||||||
if (!t->base.ann)
|
|
||||||
return NULL;
|
|
||||||
ann = (var_ann_t) t->base.ann;
|
|
||||||
|
|
||||||
gcc_assert (ann->common.type == VAR_ANN);
|
|
||||||
|
|
||||||
return ann;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the variable annotation for T, which must be a _DECL node.
|
/* Return the variable annotation for T, which must be a _DECL node.
|
||||||
|
@ -168,8 +161,9 @@ var_ann (const_tree t)
|
||||||
static inline var_ann_t
|
static inline var_ann_t
|
||||||
get_var_ann (tree var)
|
get_var_ann (tree var)
|
||||||
{
|
{
|
||||||
var_ann_t ann = var_ann (var);
|
var_ann_t *p = DECL_VAR_ANN_PTR (var);
|
||||||
return (ann) ? ann : create_var_ann (var);
|
gcc_assert (p);
|
||||||
|
return *p ? *p : create_var_ann (var);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the number of the next statement uid to be allocated. */
|
/* Get the number of the next statement uid to be allocated. */
|
||||||
|
@ -193,13 +187,6 @@ inc_gimple_stmt_max_uid (struct function *fn)
|
||||||
return fn->last_stmt_uid++;
|
return fn->last_stmt_uid++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the annotation type for annotation ANN. */
|
|
||||||
static inline enum tree_ann_type
|
|
||||||
ann_type (tree_ann_t ann)
|
|
||||||
{
|
|
||||||
return ann->common.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the line number for EXPR, or return -1 if we have no line
|
/* Return the line number for EXPR, or return -1 if we have no line
|
||||||
number information for it. */
|
number information for it. */
|
||||||
static inline int
|
static inline int
|
||||||
|
@ -678,26 +665,6 @@ is_call_used (const_tree var)
|
||||||
&& pt_solution_includes (&cfun->gimple_df->callused, var)));
|
&& pt_solution_includes (&cfun->gimple_df->callused, var)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the common annotation for T. Return NULL if the annotation
|
|
||||||
doesn't already exist. */
|
|
||||||
static inline tree_ann_common_t
|
|
||||||
tree_common_ann (const_tree t)
|
|
||||||
{
|
|
||||||
/* Watch out static variables with unshared annotations. */
|
|
||||||
if (DECL_P (t) && TREE_CODE (t) == VAR_DECL)
|
|
||||||
return &var_ann (t)->common;
|
|
||||||
return &t->base.ann->common;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return a common annotation for T. Create the constant annotation if it
|
|
||||||
doesn't exist. */
|
|
||||||
static inline tree_ann_common_t
|
|
||||||
get_tree_common_ann (tree t)
|
|
||||||
{
|
|
||||||
tree_ann_common_t ann = tree_common_ann (t);
|
|
||||||
return (ann) ? ann : create_tree_common_ann (t);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* The following set of routines are used to iterator over various type of
|
/* The following set of routines are used to iterator over various type of
|
||||||
|
|
|
@ -125,24 +125,6 @@ struct GTY(()) ptr_info_def
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
|
||||||
Tree annotations stored in tree_base.ann
|
|
||||||
---------------------------------------------------------------------------*/
|
|
||||||
enum tree_ann_type { TREE_ANN_COMMON, VAR_ANN, FUNCTION_ANN };
|
|
||||||
|
|
||||||
struct GTY(()) tree_ann_common_d {
|
|
||||||
/* Annotation type. */
|
|
||||||
enum tree_ann_type type;
|
|
||||||
|
|
||||||
/* Record EH landing pad number into a statement tree created
|
|
||||||
during RTL expansion (see gimple_to_tree). */
|
|
||||||
int lp_nr;
|
|
||||||
|
|
||||||
/* Pointer to original GIMPLE statement. Used during RTL expansion
|
|
||||||
(see gimple_to_tree). */
|
|
||||||
gimple stmt;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* It is advantageous to avoid things like life analysis for variables which
|
/* It is advantageous to avoid things like life analysis for variables which
|
||||||
do not need PHI nodes. This enum describes whether or not a particular
|
do not need PHI nodes. This enum describes whether or not a particular
|
||||||
variable may need a PHI node. */
|
variable may need a PHI node. */
|
||||||
|
@ -192,8 +174,6 @@ enum noalias_state {
|
||||||
|
|
||||||
|
|
||||||
struct GTY(()) var_ann_d {
|
struct GTY(()) var_ann_d {
|
||||||
struct tree_ann_common_d common;
|
|
||||||
|
|
||||||
/* Used when building base variable structures in a var_map. */
|
/* Used when building base variable structures in a var_map. */
|
||||||
unsigned base_var_processed : 1;
|
unsigned base_var_processed : 1;
|
||||||
|
|
||||||
|
@ -318,20 +298,10 @@ typedef struct immediate_use_iterator_d
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
union GTY((desc ("ann_type ((tree_ann_t)&%h)"))) tree_ann_d {
|
|
||||||
struct tree_ann_common_d GTY((tag ("TREE_ANN_COMMON"))) common;
|
|
||||||
struct var_ann_d GTY((tag ("VAR_ANN"))) vdecl;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef union tree_ann_d *tree_ann_t;
|
|
||||||
typedef struct var_ann_d *var_ann_t;
|
typedef struct var_ann_d *var_ann_t;
|
||||||
typedef struct tree_ann_common_d *tree_ann_common_t;
|
|
||||||
|
|
||||||
static inline tree_ann_common_t tree_common_ann (const_tree);
|
|
||||||
static inline tree_ann_common_t get_tree_common_ann (tree);
|
|
||||||
static inline var_ann_t var_ann (const_tree);
|
static inline var_ann_t var_ann (const_tree);
|
||||||
static inline var_ann_t get_var_ann (tree);
|
static inline var_ann_t get_var_ann (tree);
|
||||||
static inline enum tree_ann_type ann_type (tree_ann_t);
|
|
||||||
static inline void update_stmt (gimple);
|
static inline void update_stmt (gimple);
|
||||||
static inline int get_lineno (const_gimple);
|
static inline int get_lineno (const_gimple);
|
||||||
|
|
||||||
|
@ -556,7 +526,6 @@ extern const char *op_symbol_code (enum tree_code);
|
||||||
extern var_ann_t create_var_ann (tree);
|
extern var_ann_t create_var_ann (tree);
|
||||||
extern void renumber_gimple_stmt_uids (void);
|
extern void renumber_gimple_stmt_uids (void);
|
||||||
extern void renumber_gimple_stmt_uids_in_blocks (basic_block *, int);
|
extern void renumber_gimple_stmt_uids_in_blocks (basic_block *, int);
|
||||||
extern tree_ann_common_t create_tree_common_ann (tree);
|
|
||||||
extern void dump_dfa_stats (FILE *);
|
extern void dump_dfa_stats (FILE *);
|
||||||
extern void debug_dfa_stats (void);
|
extern void debug_dfa_stats (void);
|
||||||
extern void debug_referenced_vars (void);
|
extern void debug_referenced_vars (void);
|
||||||
|
@ -856,7 +825,6 @@ extern void add_stmt_to_eh_lp (gimple, int);
|
||||||
extern bool remove_stmt_from_eh_lp (gimple);
|
extern bool remove_stmt_from_eh_lp (gimple);
|
||||||
extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
|
extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
|
||||||
extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
|
extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
|
||||||
extern int lookup_expr_eh_lp (tree);
|
|
||||||
extern int lookup_stmt_eh_lp (gimple);
|
extern int lookup_stmt_eh_lp (gimple);
|
||||||
extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
|
extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
|
||||||
extern bool maybe_clean_eh_stmt (gimple);
|
extern bool maybe_clean_eh_stmt (gimple);
|
||||||
|
|
|
@ -1138,9 +1138,11 @@ delete_tree_ssa (void)
|
||||||
{
|
{
|
||||||
if (is_global_var (var))
|
if (is_global_var (var))
|
||||||
continue;
|
continue;
|
||||||
if (var->base.ann)
|
if (var_ann (var))
|
||||||
ggc_free (var->base.ann);
|
{
|
||||||
var->base.ann = NULL;
|
ggc_free (var_ann (var));
|
||||||
|
*DECL_VAR_ANN_PTR (var) = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
htab_delete (gimple_referenced_vars (cfun));
|
htab_delete (gimple_referenced_vars (cfun));
|
||||||
cfun->gimple_df->referenced_vars = NULL;
|
cfun->gimple_df->referenced_vars = NULL;
|
||||||
|
|
|
@ -955,7 +955,8 @@ copy_node_stat (tree node MEM_STAT_DECL)
|
||||||
TREE_CHAIN (t) = 0;
|
TREE_CHAIN (t) = 0;
|
||||||
TREE_ASM_WRITTEN (t) = 0;
|
TREE_ASM_WRITTEN (t) = 0;
|
||||||
TREE_VISITED (t) = 0;
|
TREE_VISITED (t) = 0;
|
||||||
t->base.ann = 0;
|
if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
|
||||||
|
*DECL_VAR_ANN_PTR (t) = 0;
|
||||||
|
|
||||||
if (TREE_CODE_CLASS (code) == tcc_declaration)
|
if (TREE_CODE_CLASS (code) == tcc_declaration)
|
||||||
{
|
{
|
||||||
|
|
13
gcc/tree.h
13
gcc/tree.h
|
@ -356,7 +356,6 @@ enum omp_clause_code
|
||||||
|
|
||||||
See the accessor macros, defined below, for documentation of the
|
See the accessor macros, defined below, for documentation of the
|
||||||
fields. */
|
fields. */
|
||||||
union tree_ann_d;
|
|
||||||
|
|
||||||
struct GTY(()) tree_base {
|
struct GTY(()) tree_base {
|
||||||
ENUM_BITFIELD(tree_code) code : 16;
|
ENUM_BITFIELD(tree_code) code : 16;
|
||||||
|
@ -398,8 +397,6 @@ struct GTY(()) tree_base {
|
||||||
in tree_base instead of tree_type is to save space. The size of the
|
in tree_base instead of tree_type is to save space. The size of the
|
||||||
field must be large enough to hold addr_space_t values. */
|
field must be large enough to hold addr_space_t values. */
|
||||||
unsigned address_space : 8;
|
unsigned address_space : 8;
|
||||||
|
|
||||||
union tree_ann_d *ann;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GTY(()) tree_common {
|
struct GTY(()) tree_common {
|
||||||
|
@ -2854,8 +2851,10 @@ struct GTY(()) tree_label_decl {
|
||||||
int eh_landing_pad_nr;
|
int eh_landing_pad_nr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct var_ann_d;
|
||||||
struct GTY(()) tree_result_decl {
|
struct GTY(()) tree_result_decl {
|
||||||
struct tree_decl_with_rtl common;
|
struct tree_decl_with_rtl common;
|
||||||
|
struct var_ann_d *ann;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GTY(()) tree_const_decl {
|
struct GTY(()) tree_const_decl {
|
||||||
|
@ -2873,6 +2872,7 @@ struct GTY(()) tree_const_decl {
|
||||||
struct GTY(()) tree_parm_decl {
|
struct GTY(()) tree_parm_decl {
|
||||||
struct tree_decl_with_rtl common;
|
struct tree_decl_with_rtl common;
|
||||||
rtx incoming_rtl;
|
rtx incoming_rtl;
|
||||||
|
struct var_ann_d *ann;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -3082,8 +3082,15 @@ extern void decl_fini_priority_insert (tree, priority_type);
|
||||||
#define DECL_THREAD_LOCAL_P(NODE) \
|
#define DECL_THREAD_LOCAL_P(NODE) \
|
||||||
(VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL)
|
(VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL)
|
||||||
|
|
||||||
|
#define DECL_VAR_ANN_PTR(NODE) \
|
||||||
|
(TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \
|
||||||
|
: TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \
|
||||||
|
: TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \
|
||||||
|
: NULL)
|
||||||
|
|
||||||
struct GTY(()) tree_var_decl {
|
struct GTY(()) tree_var_decl {
|
||||||
struct tree_decl_with_vis common;
|
struct tree_decl_with_vis common;
|
||||||
|
struct var_ann_d *ann;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue