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