Fully flow and context sensitive points-to analysis in GCC 4.6.0
Uday Khedker
uday@cse.iitb.ac.in
Wed Jan 23 20:17:00 GMT 2013
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
>> <uday@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.
More information about the Gcc
mailing list