On 27/10/15 13:24, Tom de Vries wrote:
Thinking it over a bit more, I realized the constraint handling started
to be messy. I've reworked the patch series to simplify that first.

      1    Simplify constraint handling
      2    Rename make_restrict_var_constraints to make_param_constraints
      3    Add recursion to make_param_constraints
      4    Add handle_param parameter to create_variable_info_for_1
      5    Handle recursive restrict pointer in create_variable_info_for_1
      6    Handle restrict struct fields recursively

Currently doing bootstrap and regtest on x86_64.

I'll repost the patch series in reply to this message.

This patch gets rid of this bit of code in intra_create_variable_infos:
...
      if (restrict_pointer_p)
        make_constraint_from_global_restrict (p, "PARM_RESTRICT");
      else
..

I already proposed to remove it here ( https://gcc.gnu.org/ml/gcc-patches/2015-10/msg02426.html ) but there is a problem with that approach: It can happen that restrict_pointer_p is true, but p->only_restrict_pointers is false. This happens with fipa-pta, when create_function_info_for created a varinfo for the parameter before intra_create_variable_infos was called.

The patch handles that case now by setting p->only_restrict_pointers.

Thanks,
- Tom
Simplify constraint handling

2015-10-27  Tom de Vries  <t...@codesourcery.com>

	* tree-ssa-structalias.c (intra_create_variable_infos): Simplify
	constraint handling.
---
 gcc/tree-ssa-structalias.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 5e070bc..4610914 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -5884,6 +5884,8 @@ intra_create_variable_infos (struct function *fn)
 	  p = create_variable_info_for_1 (t, alias_get_name (t));
 	  insert_vi_for_tree (t, p);
 	}
+      else if (restrict_pointer_p)
+	p->only_restrict_pointers = 1;
 
       /* For restrict qualified pointers build a representative for
 	 the pointed-to object.  Note that this ends up handling
@@ -5902,17 +5904,12 @@ intra_create_variable_infos (struct function *fn)
 	  continue;
 	}
 
-      if (restrict_pointer_p)
-	make_constraint_from_global_restrict (p, "PARM_RESTRICT");
-      else
+      for (; p; p = vi_next (p))
 	{
-	  for (; p; p = vi_next (p))
-	    {
-	      if (p->only_restrict_pointers)
-		make_constraint_from_global_restrict (p, "PARM_RESTRICT");
-	      else if (p->may_have_pointers)
-		make_constraint_from (p, nonlocal_id);
-	    }
+	  if (p->only_restrict_pointers)
+	    make_constraint_from_global_restrict (p, "PARM_RESTRICT");
+	  else if (p->may_have_pointers)
+	    make_constraint_from (p, nonlocal_id);
 	}
     }
 
-- 
1.9.1

Reply via email to