On Sat, Apr 26, 2014 at 4:07 PM, Richard Biener
<richard.guent...@gmail.com> wrote:
> On April 26, 2014 12:31:34 PM CEST, Swati Rathi <swatira...@cse.iitb.ac.in> 
> wrote:
>>
>>On Friday 25 April 2014 11:11 PM, Richard Biener wrote:
>>> On April 25, 2014 5:54:09 PM CEST, Swati Rathi
>><swatira...@cse.iitb.ac.in> wrote:
>>>> Hello,
>>>>
>>>> I am trying to print points-to information for SSA variables as
>>below.
>>>>
>>>>    for (i = 1; i < num_ssa_names; i++)
>>>>      {
>>>>        tree ptr = ssa_name (i);
>>>>        struct ptr_info_def *pi;
>>>>
>>>>        if (ptr == NULL_TREE
>>>>            || SSA_NAME_IN_FREE_LIST (ptr))
>>>>          continue;
>>>>
>>>>        pi = SSA_NAME_PTR_INFO (ptr);
>>>>        if (pi)
>>>>          dump_points_to_info_for (file, ptr);
>>>>      }
>>>>
>>>> -------------------------------------------------------------
>>>> My test program is given below :
>>>>
>>>> int main()
>>>> {
>>>>    int *p, i, j;
>>>>    void (*fp1)();
>>>>
>>>>    if (i)
>>>>    {
>>>>      p = &i;
>>>>      fp1 = fun1;
>>>>    }
>>>> else
>>>>    {
>>>>      p = &j;
>>>>      fp1 = fun2;
>>>>    }
>>>>
>>>> fp1();
>>>>
>>>>    printf ("\n%d %d\n", *p, i);
>>>>    return 0;
>>>> }
>>>> -------------------------------------------------------------
>>>> I get the output as :-
>>>>
>>>> p_1, points-to vars: { i j }
>>>> fp1_2, points-to vars: { }
>>>> -------------------------------------------------------------
>>>>
>>>> Why is the pointees for function pointer not getting dumped?
>>> It's just not saved.
>>
>>Can we modify the code to preserve values for function pointer SSA
>>names?
>
> Sure.

Index: gcc/tree-ssa-structalias.c
===================================================================
--- gcc/tree-ssa-structalias.c  (revision 209782)
+++ gcc/tree-ssa-structalias.c  (working copy)
@@ -6032,7 +6032,8 @@ set_uids_in_ptset (bitmap into, bitmap f

       if (TREE_CODE (vi->decl) == VAR_DECL
          || TREE_CODE (vi->decl) == PARM_DECL
-         || TREE_CODE (vi->decl) == RESULT_DECL)
+         || TREE_CODE (vi->decl) == RESULT_DECL
+         || TREE_CODE (vi->decl) == FUNCTION_DECL)
        {
          /* If we are in IPA mode we will not recompute points-to
             sets after inlining so make sure they stay valid.  */

note that there isn't a convenient way to go back from a bit in the
points-to bitmap to the actual FUNCTION_DECL refered to.

Richard.

>>What is the reason that it is not preserved for function pointers?
>
> Nobody uses this information.
>
>>Another alternative approach would be to replicate the code (of
>>pass_ipa_pta) and use the information before deleting it.
>>
>>Is there any other way to access this information?
>
> You can of course recompute it when needed.
>
> Richard.
>
>>>
>>>> How can I access this information?
>>>>
>>>>
>>>> Regards,
>>>> Swati
>>>
>
>

Reply via email to