Hi Richard,

I am trying to understand the full implications of your statement:

>> Yes, that's what I say.  Any pointer that is dereferenced is first
>> copied to
>> an SSA name.  Basically everything residing in memory first has to be
>> loaded to an SSA name before it can be dereferenced.  That load is
>> explicit
>> in the IL

There are many parts and let me take one by one:

- You talk about dereference. So a statement p=q would not mean loading
  q into memory. Had q been a global scalar variable, it would have been
  loaded into an SSA name. Then why is it not loaded when it is global
  pointer. Why a load only for p=*q and not for p=q?
- When we have p=*q, agreed that we are loading a value from memory but
  then it is *q that is being loaded. Why should an SSA name be created
  for q even when q is a local pointer?

What am I missing?

Uday.
On Friday 12 October 2012 03:25 PM, Uday P. Khedker wrote:
Excellent! Thanks.

Uday.

Richard Biener wrote, On Friday 12 October 2012 03:20 PM:
On Fri, Oct 12, 2012 at 11:46 AM, Uday P. Khedker
<u...@cse.iitb.ac.in> wrote:


Richard Biener wrote, On Friday 12 October 2012 02:51 PM:


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


This is VERY interesting! I had not thought about the difference between
computing
and using values. Now that you point it out, I think all we need to
do is to
map
flow-sensitively computed values to ssa names.

What about variables that do not have ssa names? Or are you saying
that all
such
variables would be copied into an artificial variables that have ssa
names?
I seem
to observe this in the dumps but I don't know if it holds in general.

Yes, that's what I say.  Any pointer that is dereferenced is first
copied to
an SSA name.  Basically everything residing in memory first has to be
loaded to an SSA name before it can be dereferenced.  That load is
explicit
in the IL so you should already compute points-to sets for the SSA name
destination of the load.

Richard.


Uday.

Reply via email to