On Sat, Apr 26, 2014 at 4:07 PM, Richard Biener
<[email protected]> wrote:
> On April 26, 2014 12:31:34 PM CEST, Swati Rathi <[email protected]>
> wrote:
>>
>>On Friday 25 April 2014 11:11 PM, Richard Biener wrote:
>>> On April 25, 2014 5:54:09 PM CEST, Swati Rathi
>><[email protected]> 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
>>>
>
>