On Thu, Oct 6, 2011 at 4:59 PM, Michael Matz <m...@suse.de> wrote: > Hi, > > On Sat, 3 Sep 2011, Richard Guenther wrote: > >> > OTOH it's a nice invariant that can actually be checked for (that all >> > reachable vars whatsoever have to be in referenced_vars), so I'm going >> > to do that. >> >> Yes, until we get rid of referenced_vars (which we still should do at >> some point...) that's the best. > > Okay, like so then. Regstrapped on x86_64-linux. (Note that sometimes I > use add_referenced_vars, and sometimes find_referenced_vars_in, the latter > when I would have to add several add_referenced_vars for one statement). > >> IIRC we have some verification code even, and wonder why it doesn't >> trigger. > > Nope, we don't. But with the patch we segfault in case this happens > again, which is good enough checking for me.
Ok. Thanks, Richard. > > Ciao, > Michael. > ---------------- > * tree-flow.h (get_var_ann): Don't declare. > * tree-flow-inline.h (get_var_ann): Remove. > (set_is_used): Use var_ann, not get_var_ann. > * tree-dfa.c (add_referenced_var): Inline body of get_var_ann. > * tree-profile.c (gimple_gen_edge_profiler): Call > find_referenced_var_in. > (gimple_gen_interval_profiler): Ditto. > (gimple_gen_pow2_profiler): Ditto. > (gimple_gen_one_value_profiler): Ditto. > (gimple_gen_average_profiler): Ditto. > (gimple_gen_ior_profiler): Ditto. > (gimple_gen_ic_profiler): Ditto plus call add_referenced_var. > (gimple_gen_ic_func_profiler): Call add_referenced_var. > * tree-mudflap.c (execute_mudflap_function_ops): Call > add_referenced_var. > > Index: tree-flow.h > =================================================================== > --- tree-flow.h (revision 178488) > +++ tree-flow.h (working copy) > @@ -278,7 +278,6 @@ typedef struct immediate_use_iterator_d > typedef struct var_ann_d *var_ann_t; > > static inline var_ann_t var_ann (const_tree); > -static inline var_ann_t get_var_ann (tree); > static inline void update_stmt (gimple); > static inline int get_lineno (const_gimple); > > Index: tree-flow-inline.h > =================================================================== > --- tree-flow-inline.h (revision 178488) > +++ tree-flow-inline.h (working copy) > @@ -145,16 +145,6 @@ var_ann (const_tree t) > return p ? *p : NULL; > } > > -/* Return the variable annotation for T, which must be a _DECL node. > - Create the variable annotation if it doesn't exist. */ > -static inline var_ann_t > -get_var_ann (tree var) > -{ > - var_ann_t *p = DECL_VAR_ANN_PTR (var); > - gcc_checking_assert (p); > - return *p ? *p : create_var_ann (var); > -} > - > /* Get the number of the next statement uid to be allocated. */ > static inline unsigned int > gimple_stmt_max_uid (struct function *fn) > @@ -568,7 +558,7 @@ phi_arg_index_from_use (use_operand_p us > static inline void > set_is_used (tree var) > { > - var_ann_t ann = get_var_ann (var); > + var_ann_t ann = var_ann (var); > ann->used = true; > } > > Index: tree-dfa.c > =================================================================== > --- tree-dfa.c (revision 178488) > +++ tree-dfa.c (working copy) > @@ -580,8 +580,9 @@ set_default_def (tree var, tree def) > bool > add_referenced_var (tree var) > { > - get_var_ann (var); > gcc_assert (DECL_P (var)); > + if (!*DECL_VAR_ANN_PTR (var)) > + create_var_ann (var); > > /* Insert VAR into the referenced_vars hash table if it isn't present. */ > if (referenced_var_check_and_insert (var)) > Index: tree-profile.c > =================================================================== > --- tree-profile.c (revision 178408) > +++ tree-profile.c (working copy) > @@ -224,6 +224,7 @@ gimple_gen_edge_profiler (int edgeno, ed > one = build_int_cst (gcov_type_node, 1); > stmt1 = gimple_build_assign (gcov_type_tmp_var, ref); > gimple_assign_set_lhs (stmt1, make_ssa_name (gcov_type_tmp_var, stmt1)); > + find_referenced_vars_in (stmt1); > stmt2 = gimple_build_assign_with_ops (PLUS_EXPR, gcov_type_tmp_var, > gimple_assign_lhs (stmt1), one); > gimple_assign_set_lhs (stmt2, make_ssa_name (gcov_type_tmp_var, stmt2)); > @@ -270,6 +271,7 @@ gimple_gen_interval_profiler (histogram_ > val = prepare_instrumented_value (&gsi, value); > call = gimple_build_call (tree_interval_profiler_fn, 4, > ref_ptr, val, start, steps); > + find_referenced_vars_in (call); > gsi_insert_before (&gsi, call, GSI_NEW_STMT); > } > > @@ -290,6 +292,7 @@ gimple_gen_pow2_profiler (histogram_valu > true, NULL_TREE, true, GSI_SAME_STMT); > val = prepare_instrumented_value (&gsi, value); > call = gimple_build_call (tree_pow2_profiler_fn, 2, ref_ptr, val); > + find_referenced_vars_in (call); > gsi_insert_before (&gsi, call, GSI_NEW_STMT); > } > > @@ -310,6 +313,7 @@ gimple_gen_one_value_profiler (histogram > true, NULL_TREE, true, GSI_SAME_STMT); > val = prepare_instrumented_value (&gsi, value); > call = gimple_build_call (tree_one_value_profiler_fn, 2, ref_ptr, val); > + find_referenced_vars_in (call); > gsi_insert_before (&gsi, call, GSI_NEW_STMT); > } > > @@ -340,9 +344,12 @@ gimple_gen_ic_profiler (histogram_value > > tmp1 = create_tmp_reg (ptr_void, "PROF"); > stmt1 = gimple_build_assign (ic_gcov_type_ptr_var, ref_ptr); > + find_referenced_vars_in (stmt1); > stmt2 = gimple_build_assign (tmp1, unshare_expr (value->hvalue.value)); > gimple_assign_set_lhs (stmt2, make_ssa_name (tmp1, stmt2)); > + find_referenced_vars_in (stmt2); > stmt3 = gimple_build_assign (ic_void_ptr_var, gimple_assign_lhs (stmt2)); > + add_referenced_var (ic_void_ptr_var); > > gsi_insert_before (&gsi, stmt1, GSI_SAME_STMT); > gsi_insert_before (&gsi, stmt2, GSI_SAME_STMT); > @@ -378,9 +385,11 @@ gimple_gen_ic_func_profiler (void) > counter_ptr = force_gimple_operand_gsi (&gsi, ic_gcov_type_ptr_var, > true, NULL_TREE, true, > GSI_SAME_STMT); > + add_referenced_var (ic_gcov_type_ptr_var); > ptr_var = force_gimple_operand_gsi (&gsi, ic_void_ptr_var, > true, NULL_TREE, true, > GSI_SAME_STMT); > + add_referenced_var (ic_void_ptr_var); > tree_uid = build_int_cst (gcov_type_node, current_function_funcdef_no); > stmt1 = gimple_build_call (tree_indirect_call_profiler_fn, 4, > counter_ptr, tree_uid, cur_func, ptr_var); > @@ -429,6 +438,7 @@ gimple_gen_average_profiler (histogram_v > true, GSI_SAME_STMT); > val = prepare_instrumented_value (&gsi, value); > call = gimple_build_call (tree_average_profiler_fn, 2, ref_ptr, val); > + find_referenced_vars_in (call); > gsi_insert_before (&gsi, call, GSI_NEW_STMT); > } > > @@ -449,6 +459,7 @@ gimple_gen_ior_profiler (histogram_value > true, NULL_TREE, true, GSI_SAME_STMT); > val = prepare_instrumented_value (&gsi, value); > call = gimple_build_call (tree_ior_profiler_fn, 2, ref_ptr, val); > + find_referenced_vars_in (call); > gsi_insert_before (&gsi, call, GSI_NEW_STMT); > } > > Index: tree-mudflap.c > =================================================================== > --- tree-mudflap.c (revision 178600) > +++ tree-mudflap.c (working copy) > @@ -418,6 +418,10 @@ execute_mudflap_function_ops (void) > > push_gimplify_context (&gctx); > > + add_referenced_var (mf_cache_array_decl); > + add_referenced_var (mf_cache_shift_decl); > + add_referenced_var (mf_cache_mask_decl); > + > /* In multithreaded mode, don't cache the lookup cache parameters. */ > if (! flag_mudflap_threads) > mf_decl_cache_locals (); >