diff mbox

Remove superfluous code in intra_create_variable_infos

Message ID 562A2099.9020604@mentor.com
State New
Headers show

Commit Message

Tom de Vries Oct. 23, 2015, 11:57 a.m. UTC
[ was: Re: [PATCH][PR67671] Handle restrict pointer references as 
restrict in AA ]

On 22/09/15 16:02, Richard Biener wrote:
> On Tue, 22 Sep 2015, Tom de Vries wrote:
>
>> >Hi,
>> >
>> >Consider this test-case:
>> >...
>> >struct ps
>> >{
>> >   int *__restrict__ p;
>> >};
>> >
>> >f (struct ps &__restrict__ ps1)
>> >{
>> >   *(ps1.p) = 1;
>> >}
>> >...
>> >
>> >Atm (meaning after the fix for PR67666) for this test-case, we register two
>> >clique/base annotations, one for the load of pointer ps1.p and one for the
>> >store to that pointer:
>> >...
>> >void f(ps&) (struct psD.2252 & restrict ps1D.2255)
>> >{
>> >   intD.9 * _3;
>> >
>> >   # VUSE <.MEM_1(D)>
>> >   # PT = { D.2262 } (nonlocal)
>> >   _3 = MEM[(struct psD.2252 &)ps1_2(D) clique 1 base 1].pD.2254;
>> >
>> >   # .MEM_4 = VDEF <.MEM_1(D)>
>> >   MEM[(intD.9 *)_3 clique 1 base 2] = 1;
>> >...
>> >
>> >
>> >If we rewrite the test-case by replacing the struct with its only field, we
>> >get:
>> >...
>> >f (int *__restrict__ &__restrict__ p)
>> >{
>> >   *p = 1;
>> >}
>> >...
>> >
>> >However, in this case, we register only one clique/base annotation, for the
>> >load of pointer p, but not for the store to pointer p:
>> >...
>> >void f(int* __restrict__&) (intD.9 * restrict & restrict pD.2255)
>> >{
>> >   intD.9 * _3;
>> >
>> >   # VUSE <.MEM_1(D)>
>> >   # PT = nonlocal escaped
>> >   _3 = MEM[(intD.9 * restrict &)p_2(D) clique 1 base 1];
>> >
>> >   # .MEM_4 = VDEF <.MEM_1(D)>
>> >   *_3 = 1;
>> >...
>> >
>> >
>> >This patch makes sure we register both clique/base annotations for the the
>> >second example.
>> >
>> >Bootstrapped and reg-tested on x86_64.
>> >
>> >OK for trunk?
> Ok.

Hi,

I think that after the committed change for PR67671, we arrive here in 
intra_create_variable_infos with p->only_restrict_pointers == 1 and 
p->next == 0:
...
   if (POINTER_TYPE_P (TREE_TYPE (t))
       && TYPE_RESTRICT (TREE_TYPE (t)))
     make_constraint_from_global_restrict (p, "PARM_RESTRICT");
...

In other words, we get the same effect if we enter the else branch:
...
   else
     {
       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);
	}
     }
...

So, I think we can remove the if branch. Attached patch implements that.

OK for trunk if bootstrap/reg-test succeeds?

Thanks,
- Tom

Comments

Richard Biener Oct. 23, 2015, 12:44 p.m. UTC | #1
On Fri, 23 Oct 2015, Tom de Vries wrote:

> [ was: Re: [PATCH][PR67671] Handle restrict pointer references as restrict in
> AA ]
> 
> On 22/09/15 16:02, Richard Biener wrote:
> > On Tue, 22 Sep 2015, Tom de Vries wrote:
> > 
> > > >Hi,
> > > >
> > > >Consider this test-case:
> > > >...
> > > >struct ps
> > > >{
> > > >   int *__restrict__ p;
> > > >};
> > > >
> > > >f (struct ps &__restrict__ ps1)
> > > >{
> > > >   *(ps1.p) = 1;
> > > >}
> > > >...
> > > >
> > > >Atm (meaning after the fix for PR67666) for this test-case, we register
> > > two
> > > >clique/base annotations, one for the load of pointer ps1.p and one for
> > > the
> > > >store to that pointer:
> > > >...
> > > >void f(ps&) (struct psD.2252 & restrict ps1D.2255)
> > > >{
> > > >   intD.9 * _3;
> > > >
> > > >   # VUSE <.MEM_1(D)>
> > > >   # PT = { D.2262 } (nonlocal)
> > > >   _3 = MEM[(struct psD.2252 &)ps1_2(D) clique 1 base 1].pD.2254;
> > > >
> > > >   # .MEM_4 = VDEF <.MEM_1(D)>
> > > >   MEM[(intD.9 *)_3 clique 1 base 2] = 1;
> > > >...
> > > >
> > > >
> > > >If we rewrite the test-case by replacing the struct with its only field,
> > > we
> > > >get:
> > > >...
> > > >f (int *__restrict__ &__restrict__ p)
> > > >{
> > > >   *p = 1;
> > > >}
> > > >...
> > > >
> > > >However, in this case, we register only one clique/base annotation, for
> > > the
> > > >load of pointer p, but not for the store to pointer p:
> > > >...
> > > >void f(int* __restrict__&) (intD.9 * restrict & restrict pD.2255)
> > > >{
> > > >   intD.9 * _3;
> > > >
> > > >   # VUSE <.MEM_1(D)>
> > > >   # PT = nonlocal escaped
> > > >   _3 = MEM[(intD.9 * restrict &)p_2(D) clique 1 base 1];
> > > >
> > > >   # .MEM_4 = VDEF <.MEM_1(D)>
> > > >   *_3 = 1;
> > > >...
> > > >
> > > >
> > > >This patch makes sure we register both clique/base annotations for the
> > > the
> > > >second example.
> > > >
> > > >Bootstrapped and reg-tested on x86_64.
> > > >
> > > >OK for trunk?
> > Ok.
> 
> Hi,
> 
> I think that after the committed change for PR67671, we arrive here in
> intra_create_variable_infos with p->only_restrict_pointers == 1 and p->next ==
> 0:
> ...
>   if (POINTER_TYPE_P (TREE_TYPE (t))
>       && TYPE_RESTRICT (TREE_TYPE (t)))
>     make_constraint_from_global_restrict (p, "PARM_RESTRICT");
> ...
> 
> In other words, we get the same effect if we enter the else branch:
> ...
>   else
>     {
>       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);
> 	}
>     }
> ...
> 
> So, I think we can remove the if branch. Attached patch implements that.
> 
> OK for trunk if bootstrap/reg-test succeeds?

Ok

Richard.

> Thanks,
> - Tom
> 
>
diff mbox

Patch

Remove superfluous code in intra_create_variable_infos

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

	* tree-ssa-structalias.c (intra_create_variable_infos): Remove
	superfluous code.
---
 gcc/tree-ssa-structalias.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 66a04b2..19db7f5 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -5885,18 +5885,12 @@  intra_create_variable_infos (struct function *fn)
 	  continue;
 	}
 
-      if (POINTER_TYPE_P (TREE_TYPE (t))
-	  && TYPE_RESTRICT (TREE_TYPE (t)))
-	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