On Thu, Jul 16, 2009 at 11:00 AM, Li Feng<nemoking...@gmail.com> wrote: > Hi Richard, > On 7/16/09, Richard Guenther <richard.guent...@gmail.com> wrote: >> On Thu, Jul 16, 2009 at 1:15 AM, Tobias >> Grosser<gros...@fim.uni-passau.de> wrote: >>> On Wed, 2009-07-15 at 22:48 +0200, Richard Guenther wrote: >>>> On Wed, Jul 15, 2009 at 10:46 PM, Richard >>>> Guenther<richard.guent...@gmail.com> wrote: >>>> > On Wed, Jul 15, 2009 at 9:15 PM, Tobias >>>> > Grosser<gros...@fim.uni-passau.de> wrote: >>>> >>> A note on Lis final graph algorithm. I don't understand why you >>>> >>> want >>>> >>> to allow data-references to be part of multiple alias-sets? (Of >>>> >>> course >>>> >>> I don't know how you are going to use the alias-sets ...) >>>> >> >>>> >> Just to pass more information to Graphite. The easiest example might >>>> >> be >>>> >> something like >>>> >> >>>> >> A -- B -- C >>>> >> >>>> >> if we have >>>> >> >>>> >> AS1 = {A,B} >>>> >> AS2 = {B,C} >>>> >> >>>> >> we know that A and C do not alias and therefore do not have any >>>> > >>>> > No, from the above you _don't_ know that. How would you arrive >>>> > at that conclusion? >>>> >>>> What I want to say is that, if A -- B -- C is supposed to be the alias >>>> graph >>>> resulting from querying the alias oracle for the pairs (A, B), (A, C), >>>> (B, C) >>>> then this is a result that will never occur. Because if (A, B) is true >>>> and (B, C) is true then (A, C) will be true as well. >>> >>> What for example for this case: >>> >>> void foo (*b) { >>> int *a >>> int *c >>> >>> if (bar()) >>> a = b; >>> else >>> c = b; >>> } >>> >>> I thought this may give us the example above, but it seems I am wrong. >>> If the alias oracle is transitive that would simplify the algorithm a >>> lot. Can we rely on the transitivity? >> >> Actually I was too fast (or rather it was too late), an example with >> A -- B -- C would be >> >> int a, c; >> void foo(int *p) >> >> with B == (*p). B may alias a and c but a may not alias c. >> >> So, back to my first question then, which is still valid. >> >> Just to pass more information to Graphite. The easiest example might be >> something like >> >> A -- B -- C >> >> if we have >> >> AS1 = {A,B} >> AS2 = {B,C} >> >> we know that A and C do not alias and therefore do not have any >> dependencies. >> >> How do you derive at 'A and C do not alias' from looking at >> the alias set numbers for AS1 and AS2. How do you still >> figure out that B aliases A and C just from looking at >> the alias set numbers? Or rather, what single alias set number >> does B get? > AS1 = {A,B} > AS2 = {B,C} > > B is not neccessary to have only a single alias set number, > for this situation, B will have alias number both 1 and 2 (it > is in both alias set), > A will be with alias number 1 and > C will be with alias number 2. > So A and C got different alias set number, we could conclude > that they are not alias. > While for A and B or B and C, as B got alias number both 1 and 2, > so they may alias.
I see. That would work. Richard. > Li >