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. Thanks, Richard. > Thanks, > - Tom > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)