On Fri, Oct 12, 2012 at 7:41 AM, Uday P. Khedker <u...@cse.iitb.ac.in> wrote: > > > Andrew Pinski wrote, On Friday 12 October 2012 10:29 AM: > > >>> Here's an example: >>> >>> main() >>> { >>> int **p; >>> int *a, *d; >>> int w, x; >>> >>> a = &w; >>> f1(a); >>> p = &a; >>> a = &x; >>> f2(p); >>> d = a; >>> >>> return *d; >>> } >>> >>> It is clear that d can only point to x and can never point to w. >> >> >> I think you are wrong there. >> >> int *a1; >> void f1(int *a) >> { >> a1 = a; >> } >> >> void f2(int **p) >> { >> *p = a1; >> } >> >> That will change a to &w after f2 is called. So it looks like your >> aliasing analysis does not take into account escaping like it should. >> This is the whole point of marking a as escaped. Maybe I missed >> something here though but d can point w with my functions for f1 and >> f2. > > > Ah, you caught me there, but I think I can escape, at least in this > situation :-) > > The call to f1 is not central to the point I am making; I had included it > only to ensure > that the assignment a=&w doesn't get eliminated by dead code elimination. > Since you > decided to hold the address of a into a1 through function f1, let me > eliminate the > call to f1 and make the assignment a=&w live in some other way. Here's the > changed code: > > > main() > { > int **p; > int *a, *d; > int w, x; > > d = &x; > a = &w; > if (f1()) > > { > p = &a; > a = &x; > f2(p); > d = a; > } > > return *d + *a; > } > > Now when f2 is called, a definitely does not point to w. Hence d should not > point to w. > And yet, the dump shows that d continue to point to w. > > In any case, your point about escaping variables strengthens my point about > inappropriateness > of SSA for pointer analysis, although not through this example.
The point is we are only ever interested at what SSA names point to when we use points-to information. Even the current IPA-PTA code uses internal representation for representing globals and aggregates (but yes, not flow-sensitively). For int *a; foo () { a = ...; ... use (a); } we _always_ see ssa_name_1 = a; use (ssa_name_1); so you have a place to associate your flow-sensitive and context-sensitive points-to-info with (the SSA name). My point is that for _using_ the points-to info flow-sensitivity provided by SSA form is enough. For computing it you of course need to flow-sensitively process assignments to 'a'. Richard. > Uday. > >