Patchwork rfa: remove get_var_ann (was: Fix PR50260)

login
register
mail settings
Submitter Michael Matz
Date Oct. 6, 2011, 2:59 p.m.
Message ID <Pine.LNX.4.64.1110061656490.1483@wotan.suse.de>
Download mbox | patch
Permalink /patch/118106/
State New
Headers show

Comments

Michael Matz - Oct. 6, 2011, 2:59 p.m.
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.


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.
Richard Guenther - Oct. 6, 2011, 3:12 p.m.
On Thu, Oct 6, 2011 at 4:59 PM, Michael Matz <matz@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 ();
>

Patch

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 ();