public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, 1/2] Add handle_param parameter to create_variable_info_for_1
@ 2015-10-26 11:23 Tom de Vries
  2015-10-26 13:46 ` Richard Biener
  0 siblings, 1 reply; 35+ messages in thread
From: Tom de Vries @ 2015-10-26 11:23 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 480 bytes --]

Hi,

this no-functional-changes patch copies the restrict var declaration 
code from intra_create_variable_infos to create_variable_info_for_1.

The code was copied rather than moved, since in fipa-pta mode the 
varinfo p for the parameter t may already exist due to 
create_function_info_for, in which case we're not calling 
create_variable_info_for_1 to set p, meaning the copied code won't get 
triggered.

Bootstrapped and reg-tested on x86_64.

OK for trunk?

Thanks,
- Tom

[-- Attachment #2: 0001-Add-handle_param-parameter-to-create_variable_info_f.patch --]
[-- Type: text/x-patch, Size: 3902 bytes --]

Add handle_param parameter to create_variable_info_for_1

2015-10-26  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-structalias.c (struct variable_info): Add
	restrict_pointed_var field.
	(create_variable_info_for_1): Add and handle handle_param parameter.
	(create_variable_info_for): Call create_variable_info_for_1 with extra
	arg.
	(intra_create_variable_infos): Same.  Handle case that
	p->restrict_pointed_var is unequal zero.
---
 gcc/tree-ssa-structalias.c | 40 ++++++++++++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 63a3d02..3fdad3a 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -272,6 +272,9 @@ struct variable_info
   /* True if this field has only restrict qualified pointers.  */
   unsigned int only_restrict_pointers : 1;
 
+  /* The id of the pointed-to restrict var in case only_restrict_pointers.  */
+  unsigned int restrict_pointed_var;
+
   /* True if this represents a heap var created for a restrict qualified
      pointer.  */
   unsigned int is_restrict_var : 1;
@@ -5608,10 +5611,10 @@ check_for_overlaps (vec<fieldoff_s> fieldstack)
 
 /* Create a varinfo structure for NAME and DECL, and add it to VARMAP.
    This will also create any varinfo structures necessary for fields
-   of DECL.  */
+   of DECL.  DECL is a function parameter if HANDLE_PARAM is set.  */
 
 static varinfo_t
-create_variable_info_for_1 (tree decl, const char *name)
+create_variable_info_for_1 (tree decl, const char *name, bool handle_param)
 {
   varinfo_t vi, newvi;
   tree decl_type = TREE_TYPE (decl);
@@ -5687,6 +5690,17 @@ create_variable_info_for_1 (tree decl, const char *name)
       if (POINTER_TYPE_P (TREE_TYPE (decl))
 	  && TYPE_RESTRICT (TREE_TYPE (decl)))
 	vi->only_restrict_pointers = 1;
+      if (vi->only_restrict_pointers
+	  && handle_param)
+	{
+	  varinfo_t rvi;
+	  tree heapvar = build_fake_var_decl (TREE_TYPE (decl_type));
+	  DECL_EXTERNAL (heapvar) = 1;
+	  rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", false);
+	  rvi->is_restrict_var = 1;
+	  insert_vi_for_tree (heapvar, rvi);
+	  vi->restrict_pointed_var = rvi->id;
+	}
       fieldstack.release ();
       return vi;
     }
@@ -5738,7 +5752,7 @@ create_variable_info_for_1 (tree decl, const char *name)
 static unsigned int
 create_variable_info_for (tree decl, const char *name)
 {
-  varinfo_t vi = create_variable_info_for_1 (decl, name);
+  varinfo_t vi = create_variable_info_for_1 (decl, name, false);
   unsigned int id = vi->id;
 
   insert_vi_for_tree (decl, vi);
@@ -5880,7 +5894,8 @@ intra_create_variable_infos (struct function *fn)
       varinfo_t p = lookup_vi_for_tree (t);
       if (p == NULL)
 	{
-	  p = create_variable_info_for_1 (t, alias_get_name (t));
+	  p = create_variable_info_for_1 (t, alias_get_name (t),
+					  recursive_restrict_p);
 	  insert_vi_for_tree (t, p);
 	}
 
@@ -5890,12 +5905,17 @@ intra_create_variable_infos (struct function *fn)
 	 in the first/last subfield of the object.  */
       if (recursive_restrict_p)
 	{
-	  varinfo_t vi;
-	  tree heapvar = build_fake_var_decl (TREE_TYPE (TREE_TYPE (t)));
-	  DECL_EXTERNAL (heapvar) = 1;
-	  vi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS");
-	  vi->is_restrict_var = 1;
-	  insert_vi_for_tree (heapvar, vi);
+	  varinfo_t vi = get_varinfo (p->restrict_pointed_var);
+	  if (vi == NULL)
+	    {
+	      tree heapvar = build_fake_var_decl (TREE_TYPE (TREE_TYPE (t)));
+	      DECL_EXTERNAL (heapvar) = 1;
+	      vi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", false);
+	      vi->is_restrict_var = 1;
+	      insert_vi_for_tree (heapvar, vi);
+	      p->restrict_pointed_var = vi->id;
+	      p->only_restrict_pointers = 1;
+	    }
 	  make_constraint_from (p, vi->id);
 	  make_restrict_var_constraints (vi);
 	  continue;
-- 
1.9.1


^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2015-11-04 17:01 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-26 11:23 [PATCH, 1/2] Add handle_param parameter to create_variable_info_for_1 Tom de Vries
2015-10-26 13:46 ` Richard Biener
2015-10-26 16:26   ` Tom de Vries
2015-10-27  7:59     ` [PATCH, PR67742] Handle restrict struct fields recursively Tom de Vries
2015-10-27 12:26       ` Tom de Vries
2015-10-27 12:49         ` [PATCH, 1/6] Simplify constraint handling Tom de Vries
2015-10-28 15:38           ` Richard Biener
2015-10-28 16:06             ` Tom de Vries
2015-10-28 21:32               ` Tom de Vries
2015-10-29 11:16               ` Richard Biener
2015-10-29 12:31                 ` Tom de Vries
2015-10-29 13:15                   ` Richard Biener
2015-10-29 16:10                     ` Tom de Vries
2015-10-30  9:44                       ` Richard Biener
2015-10-31  8:24                         ` Tom de Vries
2015-10-31  9:44                           ` [committed, trivial] Don't expect existing varinfo for arguments in intra_create_variable_infos Tom de Vries
2015-10-27 12:50         ` [PATCH, 2/6] Rename make_restrict_var_constraints to make_param_constraints Tom de Vries
2015-10-28 15:45           ` Richard Biener
2015-10-28 21:56             ` Tom de Vries
2015-10-27 13:04         ` [PATCH, 3/6] Add recursion " Tom de Vries
2015-11-01 18:04           ` Tom de Vries
2015-11-01 18:13             ` Tom de Vries
2015-11-02 15:25               ` Richard Biener
2015-11-02 23:29                 ` Tom de Vries
2015-11-01 18:20             ` [PATCH, 2/2] Handle recursive restrict in function parameter Tom de Vries
2015-11-03 13:47               ` Tom de Vries
2015-11-03 13:59                 ` [gomp4,committed] " Tom de Vries
2015-11-04 17:01                   ` Tom de Vries
2015-11-03 15:08                 ` [PATCH, 2/2] " Richard Biener
2015-11-03 16:44                   ` Tom de Vries
2015-11-04  9:28                     ` Richard Biener
2015-11-04 14:25                       ` [committed] " Tom de Vries
2015-10-27 13:06         ` [PATCH, 4/6] Add handle_param parameter to create_variable_info_for_1 Tom de Vries
2015-10-27 13:12         ` [PATCH, 5/6] Handle recursive restrict pointer in create_variable_info_for_1 Tom de Vries
2015-10-27 13:17         ` [PATCH, 6/6] Handle restrict struct fields recursively Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).