diff mbox

[1/6] Simplify constraint handling

Message ID 562F711F.80900@mentor.com
State New
Headers show

Commit Message

Tom de Vries Oct. 27, 2015, 12:42 p.m. UTC
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

Comments

Richard Biener Oct. 28, 2015, 3:35 p.m. UTC | #1
On Tue, 27 Oct 2015, Tom de Vries wrote:

> 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.

Hmm, but ... restrict only has an effect in non-IPA mode.  That we
use intra_create_variable_infos in IPA mode is only done for correctness
(to set up incoming NONLOCAL) for functions we do not see all callers of.

Maybe we should fix that (in intra_create_variable_infos properly
add constraints from NONLOCAL for all such functions).

Richard.

> Thanks,
> - Tom
>
diff mbox

Patch

Simplify constraint handling

2015-10-27  Tom de Vries  <tom@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